我有一个文本文件。文件中的每一行看起来是这样,但有不同的长度:如何从文本文件创建数据帧
negative فينو اهبل ابن اهبل
positive فينو اهبل ابن اهبل
neutral فينو اهبل ابن اهبل
当我使用pandas.read_table
它读成一列,我尝试转换文件到Excel或CSV,但还是将其转换为一列
我希望它是一个两列数据框,其中negative
在其自己的列中,其余列在其他列中。
我有一个文本文件。文件中的每一行看起来是这样,但有不同的长度:如何从文本文件创建数据帧
negative فينو اهبل ابن اهبل
positive فينو اهبل ابن اهبل
neutral فينو اهبل ابن اهبل
当我使用pandas.read_table
它读成一列,我尝试转换文件到Excel或CSV,但还是将其转换为一列
我希望它是一个两列数据框,其中negative
在其自己的列中,其余列在其他列中。
先读取整个文件转换成数据帧与单个列:
df = pd.read_csv('/path/to/file.txt', sep='~', header=None)
产量:
In [50]: df
Out[50]:
0
0 negative aaa bbb ccc ddd
1 positive qqq vvv
现在我们可以分析它是这样的:
In [51]: df[['col1','col2']] = df.pop(0).str.extract(r'^([^\s]+)\s*(.*?)$', expand=True)
In [52]: df
Out[52]:
col1 col2
0 negative aaa bbb ccc ddd
1 positive qqq vvv
或:
In [65]: df[['col1','col2']] = df.pop(0).str.split(n=1, expand=True)
In [66]: df
Out[66]:
col1 col2
0 negative aaa bbb ccc ddd
1 positive qqq vvv
您可以构建自己的解析器,如:
代码:
def parse_my_file(filename):
with open(filename) as f:
for line in f:
yield line.strip().split(' ', 1)
测试代码:
df = pd.DataFrame(parse_my_file('file1'))
print(df)
结果:
0 1
0 negative فينو اهبل ابن اهبل
1 neutral فينو اهبل ابن اهبل
2 positive فينو اهبل ابن اهبل
非常有趣的方法! – MaxU
非常感谢,完美!我尝试过之前分裂,但从未使用收益,所以我得到了多个错误 –
输入:
from io import StringIO
table = """
negative فينو اهبل ابن اهبل
positive فينو اهبل ابن اهبل
neutral فينو اهبل ابن اهبل
negative فينو اهبل ابن اهبل
negative فينو اهبل ابن اهبل
negative فينو اهبل ابن اهبل
"""
读文件:
df_in = pd.read_fwf(StringIO(table),widths=[8,1000])
print(df_in)
输出:
Unnamed: 0 Unnamed: 1
0 negative فينو اهبل ابن اهبل
1 positive فينو اهبل ابن اهبل
2 neutral فينو اهبل ابن اهبل
3 negative فينو اهبل ابن اهبل
4 negative فينو اهبل ابن اهبل
5 negative فينو اهبل ابن اهبل
是否总是'negative',或者你只是想在第一空间打破? –
看看'pd.read_fwf' –
没有3个数值正数,负数,中性数 –