我有一个txt文件,其中包含一定数量的行。
每行可能包含不同数量的项目。

这是input.txt的示例:

1,0,50,20,2,96,152,65,32,0
1,0,20,50,88,45,151
1,1,90,15,86,11,158,365,45
2,0,50,20,12,36,157,25
2,0,20,50,21,63,156,76,32,77
3,1,50,20,78,48,152,75,52,22,96

我的目标是将此数据存储在具有以下结构的数据框中:
  • 5列
  • 从1到4的
  • 列包含每行
  • 所包含的前4个值
  • 5列包含一个列表,该列表存储每行
  • 剩下的内容

    因此,输出应如下所示:
    Out[8]:
       A  B   C   D                              E
    0  1  0  50  20        [2, 96, 152, 65, 32, 0]
    1  1  0  20  50                  [88, 45, 151]
    2  1  1  90  15         [86, 11, 158, 365, 45]
    3  2  0  50  20              [12, 36, 157, 25]
    4  2  0  20  50      [21, 63, 156, 76, 32, 77]
    5  3  1  50  20  [78, 48, 152, 75, 52, 22, 96]
    

    我尝试使用pandas.read_csv('input.txt'),但由于行的长度不同,因此无法正常工作。

    您能建议我一个聪明而优雅的方法来实现自己的目标吗?

    最佳答案

    您可以将 read_csv 与某些不在数据中的分隔符一起使用-输出为一列df:

    import pandas as pd
    from pandas.compat import StringIO
    
    temp="""1,0,50,20,2,96,152,65,32,0
    1,0,20,50,88,45,151
    1,1,90,15,86,11,158,365,45
    2,0,50,20,12,36,157,25
    2,0,20,50,21,63,156,76,32,77
    3,1,50,20,78,48,152,75,52,22,96"""
    #after testing replace 'StringIO(temp)' to 'filename.csv'
    df = pd.read_csv(StringIO(temp), sep="|", names=['A'])
    print (df)
                                     A
    0       1,0,50,20,2,96,152,65,32,0
    1              1,0,20,50,88,45,151
    2       1,1,90,15,86,11,158,365,45
    3           2,0,50,20,12,36,157,25
    4     2,0,20,50,21,63,156,76,32,77
    5  3,1,50,20,78,48,152,75,52,22,96
    

    然后使用 split :
    cols = list('ABCDE')
    df[cols] = df.A.str.split(',', n=4, expand=True)
    df.E = df.E.str.split(',')
    print (df)
       A  B   C   D                              E
    0  1  0  50  20        [2, 96, 152, 65, 32, 0]
    1  1  0  20  50                  [88, 45, 151]
    2  1  1  90  15         [86, 11, 158, 365, 45]
    3  2  0  50  20              [12, 36, 157, 25]
    4  2  0  20  50      [21, 63, 156, 76, 32, 77]
    5  3  1  50  20  [78, 48, 152, 75, 52, 22, 96]
    

    关于python - 使用Pandas从具有不同行长的文件导入数据,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/42899845/

    10-11 07:40
    查看更多