[英]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,但目標沒有實現。 但是,我不確定這是凱爾的想法。
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.