我有一個文本文件。文件中的每一行看起來是這樣,但有不同的長度:如何從文本文件創建數據幀
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個數值正數,負數,中性數 –