簡體   English   中英

在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中攝取它,其中維護這些列中的值的類型?

如果沒有,將它們轉換回list,set,dictionaries的最佳方法是什么?

問題源於這樣的事實:一旦有一個具有這種結構的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,但目標沒有實現。 但是,我不確定這是凱爾的想法。

嘗試使用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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM