如何使用pandas数据帧重新格式化.csv文件?

时间:2016-05-26 15:37:01

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

只是一个简单的问题,使用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__'

3 个答案:

答案 0 :(得分:2)

尝试:

df.set_index('id')

df是您的数据框

修改

IIUC

您提供的是csv文件中的文本,您将其导入到pandas数据框中。当你说:

时,这会令人困惑
  

如何将之前的数据框重构为这样的内容?:

我相信您已经混淆了什么是数据帧以及什么是csv。

csv it text或带有要解析的文本的文件。通常,此文本以逗号分隔。 ( C omma S eparated V alues)

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

你说的是你想要的。

答案 1 :(得分: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

答案 2 :(得分:1)

看起来其中一列有一个空白字符串,你可以drop

class ClassB(Class*):
    def __init__(self, name, lst=None, other=None):
        self.my_A = ClassA(lst, ...)