【问题标题】:Pandas read csv column values as listPandas 将 csv 列值读取为列表
【发布时间】:2019-06-17 23:56:39
【问题描述】:

我有一个包含 6 列的大型数据框,每列都有一个列表。当我将数据框保存到 csv 并读取 csv 时,列表将转换为字符串。

我发现了一个与我很接近的问题:How to read a column of csv as dtype list using pandas?

但问题是没有时间将每个字符串转换回列表。将所有字符串转换回列表大约需要 4-5 小时。

有一种简单的方法可以将包含列表的数据框保存为易于在 pandas 中再次访问的格式。

【问题讨论】:

  • 是否可以选择使用标量将列表系列拆分为多个系列? Pandas 的设计目的不是为了保存一系列列表。

标签: python pandas csv


【解决方案1】:

您可以尝试使用pickle

例如:

import pandas as pd

df = pd.DataFrame({"Col": [[1,2,3], [4,5,6]]})
df.to_pickle(filename)

#Read the pickle file
df = pd.read_pickle(filename)
print(df["Col"])
print(df["Col"][0][0])

输出:

0    [1, 2, 3]
1    [4, 5, 6]
Name: Col, dtype: object
1

MoreInfo

【讨论】:

  • 刚刚用我的数据试了一下,效果很好!!非常感谢:)
【解决方案2】:

要回答您的问题,您可以使用 literal_eval():

from ast import literal_eval
import pandas as pd
import io

csv = io.StringIO(u'''
id  list
A1  "[1,2]"
A2  "[3,4]"
A3  "[5,6]"
''')
df = pd.read_csv(csv, delim_whitespace = True)

输入 DF:

   id   list
0  A1  [1,2]
1  A2  [3,4]
2  A3  [5,6]

# Output is a string
print(type(df.loc[0, 'list']))

# Convert entire column to a list
df.loc[:,'list'] = df.loc[:,'list'].apply(lambda x: literal_eval(x))

# Output is a list
print(type(df.loc[0, 'list']))

####### Convert Column values to List ######
print(df["list"].tolist())
#Output - [[1, 2], [3, 4], [5, 6]]

【讨论】:

  • 我确实使用了 literal_eval() 将我的字符串解析为列表。但我只想做一次,而不是每次尝试访问我的数据(csv 文件)。
猜你喜欢
  • 2015-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-21
  • 1970-01-01
相关资源
最近更新 更多