Save Pandas df containing long list as csv file
我正在尝试将pandas数据帧保存为.csv文件。 目前我的代码如下所示:
1 2
| with open('File.csv', 'a') as f:
df.to_csv(f, header=False) |
保存有效,但问题是我的数据框中的列表只是压缩为[first,second,...,last],并且中间的所有条目都被丢弃。 如果我只看原始数据帧,那么所有条目都在那里。 有什么方法可以将列表转换为包含所有元素的字符串(str(df)也丢弃中间元素)或者如何在csv表的单元格中保存完整的numpy数组?
谢谢您的帮助,
维维安
-
我没有看到你的代码没有任何原因。 我确实注意到您要附加到文件而不是创建新文件。 您确定该文件没有您描述的数据吗?如果您查看该文件的末尾它是否包含整个数据帧?
-
是的,为了我的目的,我需要追加,不,它还没有结束,对不起
-
不,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('File.csv', header=False, mode='a') |
PS注意mode='a'(追加)参数......
更新:
如何在显示/打印DF时删除省略号:
1 2
| 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,无法恢复被'...'替换的数据)
-
@Viviane,在Text或HEX编辑器中检查它 - 例如在Notepad++中
-
在我尝试的任何编辑器中都看不到更多...毕竟,我需要以某种方式将信息传递给python
-
@Viviane,请参阅我的答案中的UPDATE部分...
-
我不知道我是否忽略了一些东西,但我使用了这段代码: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,mode='a') test = pd.read_csv('test.csv',names=['ID','A']).set_index('ID') with pd.option_context("display.max_columns", 0): print(test['A'])输出为:ID 1 [0. 0. 0. ...,0。0. 0.]
-
@Viviane,试试这种方式:df = pd.DataFrame({'A':hot}).assign(ID=1)而不是你的代码......
-
很明显问题不在于文件,而是@Viviane如何检查文件。
-
@RyanSandridge,他在评论中创建DF的方式在将其保存为CSV时会导致问题...
-
是的我同意Max,我没有找到任何方式可以打开它并查看列表的所有内容。然而,当创建像Max提出的df时,它会保存所有内容。我不确定我是否可以使用这种方式在我的情况下创建Df。
我在保存数据帧时遇到了问题。我有一个数据框,其中一些列包含列表作为其元素。当我使用df.to_csv保存datfarme然后使用df.read_csv从磁盘读取它时,列表和数组变成了一串字符。因此[1,2,3]被转换为'[1,2,3]'。当我使用HDF5格式时,问题就解决了。
如果您将数据框称为df_temp,则可以使用:
1 2
| store = pd.HDFStore('store.h5')
store['df'] = df_temp |
以HDF5格式保存数据帧,您可以使用以下命令读取它:
1 2
| store = pd.HDFStore('store.h5')
df_temp_read = store['df'] |
你可以看看这个答案。我还应该提一下,pickle对我不起作用,因为我从文件中读取时丢失了列名。也许我做错了什么,但除此之外,如果你计划在不同的python版本中读取文件,pickle可能会导致兼容性问题。
您可以使用join方法转换列表中的元素。
例:
1 2 3
| lst = ['Hello!','I','am', 'Pandas User','.']
strng = ' '.join(lst)
print (strng) |
希望这对你有所帮助。
-
谢谢你,这是有效的:)如果有一种方式pandas只是保存csv文件中的所有内容而没有这个技巧,那将是很好的,但这是一个解决它的好方法。
-
我很高兴这项工作适合你。我很想知道为什么你的原始代码不起作用。希望知道的人仍会发布解释!