将包含长列表的 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

用pandas编写单个CSV标头

将列表写入 pandas 数据帧到 csv,从 csv 读取数据帧并再次转换为列表而无需字符串

如何将包含嵌套列表的字典列表转换为 pandas df

将 Pandas 数据框的选择保存到 csv [重复]

Pandas:将csv文件作为列表加载