在 Python 中以列表、集合、字典的形式提取列

Ingest columns as lists, sets, dictionaries in Python

给定一个 csv 文件,其中某些列包含列表、集合或字典,例如 具有以下结构的一个:

| user_id| items                   | methods        | dict_col      |
|--------|-------------------------|----------------|---------------|
| ID01   | [potato, apple, potato] | {card, cash}   | {F: [AB, CD]} |
| ID02   | [carrots, papaya]       | {bitcoin, card}| {F: [AB, CD]} |

有没有办法以表格方式在 Python 中摄取它,其中保留了这些列中值的类型?

如果不是,将它们转换回列表、集合、字典的最佳方法是什么?

问题源于这样一个事实,即一旦拥有具有这种结构的 DataFrame 并将其保存到 csv 中,当使用 pandas.read_csv() 加载回 csv 时,这些列中的值是 no更长的列表、集合或字典。

下面是重新创建上述场景的代码。

import pandas as pd

# Create dummy example
df = pd.DataFrame({'user_id': ['ID01', 'ID02'], 'items': [['potato',   'apple', 'potato'],['carrots', 'papaya']],
              'methods': [{'card', 'cash'}, {'bitcoin', 'card'}],
               'dict_col': [{'F': ['AB', 'CD']}, {'F': ['AB', 'CD']}]})
df[['user_id', 'items', 'methods', 'dict_col']]

type(df.iloc[0]['dict_col']) # Return a dict

df.to_csv('dummy_table.csv', index = False)
# Reload the table
df_loaded = pd.read_csv('dummy_table.csv')

"""
Line below returns a str and not a dict as in the original dataframe.   How we go back to the original datatypes 
(e.g. list, dict, set)in a pythonic way?
"""
type(df_loaded.iloc[0]['dict_col'])

在 Kyle J. 评论尝试 cvs.DictReader 后尝试
我尝试使用 DictReader,但未满足 objective。但是,我不确定这是否是 Kyle 的想法。

尝试使用 DictReader

import csv
import pandas as pd
df = pd.DataFrame()
with open('dummy_table.csv', newline = '') as csvfile:
    reader = csv.DictReader(csvfile)
    for row in reader:
        df = pd.concat([df, pd.DataFrame(row, index = [0])], axis = 0)
type(df.iloc[0]['dict_col']) # Still a str

如果标准 csv 模块以相同的方式执行,专门用于解决您的问题,您应该尝试

import ast

###your original code####

dict_value = ast.literal_eval(df_loaded.iloc[0]['dict_col'])
type(dict_value)