将包含长列表的 Pandas df 保存为 csv 文件
Posted
技术标签:
【中文标题】将包含长列表的 Pandas df 保存为 csv 文件【英文标题】:Save Pandas df containing long list as csv file 【发布时间】:2018-05-31 04:15:16 【问题描述】:我正在尝试将 pandas 数据框保存为 .csv 文件。目前我的代码如下所示:
with open('File.csv', 'a') as f:
df.to_csv(f, header=False)
保存有效,但问题是我的数据框中的列表只是压缩到 [first,second,...,last] 并且中间的所有条目都被丢弃了。如果我只看原始数据框,所有条目都在那里。有什么方法可以将列表转换为包含所有元素的字符串(str(df) 也会丢弃中间元素),或者如何将完整的 numpy 数组保存在 csv 表的单元格中?
感谢您的帮助, 薇薇安
【问题讨论】:
我看不出你的代码没有任何原因。我确实注意到您正在附加到文件而不是创建新文件。您确定该文件还没有您描述的数据,如果您查看该文件的末尾,它有整个数据框吗? 是的,为了我的目的,我需要追加,不,它还没有结束,抱歉 不,df.to_csv('File.csv', header=False, mode='a')
应该将 所有 值写入文件。你能生成一个可重现的代码吗?
df = pd.DataFrame(columns=['ID','A']) hot = np.zeros(9999) ID = 1 df=df.append('ID': int(ID),'A':hot, ignore_index=True) with open('test.csv', 'a') as f: df.to_csv(f, header=False)
【参考方案1】:
我在保存数据帧时也遇到了问题。我有一个数据框,其中一些列由列表作为元素组成。当我使用df.to_csv
保存数据农场,然后使用df.read_csv
从磁盘读取它时,列表和数组变成了字符串。因此[1,2,3]
被转换为'[1,2,3]'
。当我使用 HDF5 格式时,问题就解决了。
如果你的数据框被称为df_temp
,那么你可以使用:
store = pd.HDFStore('store.h5')
store['df'] = df_temp
以 HDF5 格式保存数据帧,您可以使用以下命令读取它:
store = pd.HDFStore('store.h5')
df_temp_read = store['df']
你可以看看这个answer。我还应该提到泡菜对我不起作用,因为我在从文件中读取时丢失了列名。也许我做错了什么,但除此之外,如果您打算以不同的 python 版本读取文件,pickle 可能会导致兼容性问题。
【讨论】:
这应该是选择的答案。适用于包含多个数据类型的多个列表的数据框【参考方案2】:您的代码应该可以正常工作。我无法重现所描述的行为。
这是一个更“流行”的版本:
df.to_csv('File.csv', header=False, mode='a')
PS注意mode='a'
(追加)参数...
更新:
How to get rid of ellipsis when displaying / printing a DF:
with pd.option_context("display.max_columns", 0):
print(df)
【讨论】:
我同意这个应该也可以工作,但我看不出原始代码为什么不能工作。它们应该是等价的。DataFrame.to_csv
接受文件名或文件缓冲区。
@RyanSandridge,这是正确的 - 谢谢!我已经相应地更新了任何答案......
由于某种原因它仍然对我不起作用,我在顶部发布了一些示例代码作为评论。但是,连接字符串解决方法有效
@Viviane,你如何检查书面的 CSV?
我通过查看 excel 中的文件并使用以下代码检查了它:test = pd.read_csv('test.csv',names=['ID','A']).set_index('ID') type(test['A'][1])
(输出:str,无法恢复被 '...' 替换的数据)【参考方案3】:
您可能可以使用 join 方法转换列表中存在的元素。
示例:
lst = ['Hello!','I','am', 'Pandas User','.']
strng = ' '.join(lst)
print (strng)
希望这对你有帮助。
【讨论】:
谢谢你,这行得通 :) 如果有一种方法可以让 pandas 将所有内容保存在 csv 文件中而无需使用该技巧,但这是解决此问题的好方法。跨度> 我很高兴这项工作对您有用。我很想了解为什么您的原始代码不起作用。希望知道的人仍然会发表解释!以上是关于将包含长列表的 Pandas df 保存为 csv 文件的主要内容,如果未能解决你的问题,请参考以下文章
如何将 2 个列表的列表转换为 pandas 中的 2 列 df