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

标签 python python-3.x csv tabular

给定一个 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 时,这些列中的值不再是列表,设置或字典。

在重新创建上述场景的代码下方。

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,但没有达到目的。但是,我不确定这是否是 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)

关于python - 在 Python 中以列表、集合、字典的形式提取列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49707924/

相关文章:

python - sklearn 中的 TfidfVectorizer 如何具体包含单词

python - 质因数,帮助理解平方根的用途

python - 如何将这个数组数组格式化为 pandas 数据框?

python - 通过 csv 短路控制台输出

python - 名称 'ImageDataBunch' 未定义

python - #include <Python.h> - 在 Linux Mint 上终止编译

python - 计算嵌套列表中每个位置的出现次数

Ubuntu 上的 Python3 在 help() 命令上出现错误

php - 使用 php 从数据库获取数据并作为电子邮件附件发送

python - 如何在 mySQL 中存储 IP