【问题标题】:How to reformat a .csv file with in pandas dataframe?如何在 pandas 数据框中重新格式化 .csv 文件?
【发布时间】:2016-05-26 15:37:01
【问题描述】:

只是一个简单的问题,使用 pandas to_csv() 函数我将 pandas 数据框保存为具有以下结构的 .csv 文件:

在:

df.to_csv(output_file, sep = '|')

输出:

|id|column2|column3
0|id_1|bla bla bla bla|more strings
1|id_2|bla bla bla bla|more strings
2|id_3|bla bla bla bla|more strings
....
n-1|id_n|bla bla bla bla| more strings

上一个文件的问题是格式,你可以看到.csv文件的左侧有一个坏列:

|id|
0|
1|
2|
....
n-1|

从一开始,我就尝试通过以下方式删除实际上没有名称的列:

df.drop('',axis=1)
print list(df.columns.values)
['id', 'column2', 'column3]

但是,它没有奏效。如何使用to_csv() 函数将以前的 .csv 文件重组为类似的内容?:

id|column2|column3
id_1|bla bla bla bla|more strings
id_2|bla bla bla bla|more strings
id_3|bla bla bla bla|more strings
....
id_n|bla bla bla bla|more strings

更新

在@piRSquared 的回答下,我尝试重新格式化 csv 文件,如下所示:

print list(df.columns.values)
return df.to_csv(output_file, sep='|', index_col=1)[['column1','column2', 'column3']]
#return df.to_csv(output_file, sep = '|')

不过,我得到了这个:

['id', 'content', 'POS-tagged_content']
Traceback (most recent call last):
  File "script.py", line 48, in <module>
    preprocess_files(input_file, output_file)
  File "script.py", line 39, in postag_pandas
    return df.to_csv(output_file, sep='|', index_col=1)[['column1','column2', 'column3']]
TypeError: 'NoneType' object has no attribute '__getitem__'

【问题讨论】:

  • 你只是想修剪索引,对吗?
  • 你的意思是df.set_index('id', inplace=True)?
  • 感谢大家的反馈。我只想删除没有任何标题的列。我已经尝试过:df.set_index('id')。但是,它没有奏效。
  • 你的意思是df.drop('',axis=1)
  • 为了避免混淆,您应该练习提供足够的代码来生成您当前有疑问的状态。请以此为指导stackoverflow.com/help/mcve

标签: python python-2.7 python-3.x pandas


【解决方案1】:

试试:

df.set_index('id')

df 是您的数据框


编辑

IIUC

您提供的是来自 csv 文件的文本,并且您正在将其导入 pandas 数据框。当你说:

如何将以前的数据帧重组成这样的东西?:

我相信您已经混淆了什么是数据框和什么是 csv。

一个 csv it 文本或一个包含要解析的文本的文件。通常,此文本用逗号分隔。 (Comma S分隔的Values)

pandas/python 上下文中的数据框是一个 python 对象。

说了这么多,我相信你是想问的:

如何导入包含此文本的 csv,这样我就不会得到第一列。

text = """|id|column2|column3
0|id_1|bla bla bla bla|more strings
1|id_2|bla bla bla bla|more strings
2|id_3|bla bla bla bla|more strings
n-1|id_n|bla bla bla bla| more strings"""

df = pd.read_csv(StringIO(text), sep='|', index_col=1)[['column2', 'column3']]

print df

看起来像:

              column2        column3
id                                  
id_1  bla bla bla bla   more strings
id_2  bla bla bla bla   more strings
id_3  bla bla bla bla   more strings
id_n  bla bla bla bla   more strings

从这里您可以像这样保存到 csv:

df.to_csv('./mycsv.csv')

生产

id,column2,column3
id_1,bla bla bla bla,more strings
id_2,bla bla bla bla,more strings
id_3,bla bla bla bla,more strings
id_n,bla bla bla bla, more strings

这就是你所说的你想要的。

【讨论】:

  • 感谢您的帮助!没有成功。关于如何删除没有任何标题的索引的任何其他想法?。
  • 请注意,它不是 pandas df,它实际上是一个 .csv 文件。
  • 谢谢和抱歉...我将 .csv 文件与 pandas 数据框混淆了。我忽略了这是在我使用to_csv 函数时的事实。当我保存为 .csv 文件时,我想重新格式化。
  • 感谢您的帮助,可能我不清楚。我为我的问题添加了更多细节。
【解决方案2】:
print df.to_string(index=False)

这将打印没有索引的数据框。

>>> print df
     id          column2       column3
0  id_1  bla bla bla bla  more strings
1  id_2  bla bla bla bla  more strings
2  id_3  bla bla bla bla  more strings

>>> print df.to_string(index=False)
   id          column2       column3
 id_1  bla bla bla bla  more strings
 id_2  bla bla bla bla  more strings
 id_3  bla bla bla bla  more strings

【讨论】:

  • 感谢andy的帮助,注意其实是.csv文件
【解决方案3】:

您的其中一列似乎有一个空白字符串,您可以drop它:

In [47]:
df = pd.DataFrame(np.random.randn(5,2), columns=['','asd'])
df

Out[47]:
                  asd
0 -0.911575 -0.142538
1  0.746839 -1.504157
2  0.611362  0.400219
3 -0.959443  1.494226
4 -0.346508 -1.471558

In [48]:
df.drop('',axis=1)

Out[48]:
        asd
0 -0.142538
1 -1.504157
2  0.400219
3  1.494226
4 -1.471558

【讨论】:

  • 感谢您的帮助!,我已经准备好尝试删除索引,但我得到了这个 esxception:ValueError: labels [''] not contained in axis
  • 你能把 df.columns.tolist() 和 df.info() 的输出贴出来
  • 当然我也试试:print list(df.columns.values):['id', 'column2', 'column3]
  • 感谢 Ed 的帮助,我在问题中添加了更多详细信息。
猜你喜欢
  • 2020-10-28
  • 2015-11-09
  • 2016-01-16
  • 2015-12-07
  • 1970-01-01
  • 2018-12-08
  • 1970-01-01
  • 2020-11-11
  • 2021-11-09
相关资源
最近更新 更多