【问题标题】:How to modify properly a pandas frame如何正确修改熊猫框架
【发布时间】:2018-07-24 06:48:02
【问题描述】:

我有一个格式如下的 txt 文件:

E 7 FF 58322 000000 300 442 1165 +67875 +29
E19 FF 58322 000000 300 302 3027 +138703 +174
E 7 FF 58322 000000 300 442 1165 +67875 +29

如您所见,第一行和第三行在第一列中有 E 7,我试图将文件读入 pandas 数据帧,但它会将 E 7 识别为两个不同的列,可以使用命令E 7togheter?

我试过这个命令:

data = pd.read_csv('test.txt', sep=" ")

但它会返回:

E   7     FF  58322  000000  300   442      1165  +67875  +29
E19  FF  58322      0     300  302  3027    138703     174
E   7     FF  58322  000000  300   442      1165  +67875  +29

我想:

E7     FF  58322  000000  300   442      1165  +67875  +29
E19    FF  58322  000000  300   302      3027  138703  174
E7     FF  58322  000000  300   442      1165  +67875  +29

有可能吗?

非常感谢

【问题讨论】:

    标签: python python-2.7 pandas dataframe


    【解决方案1】:

    您正在使用sep=" " 分隔每个空间的数据。因为E 7 之间有一个空格,所以它们也被分开了。

    您需要修改您的测试文件并删除E7之间的空格,您将获得预期的结果。

    【讨论】:

      【解决方案2】:

      这是您的数据有问题。在开始尝试将其读入DataFrame 之前,您需要对其进行清理。编辑您的 txt 文件并删除 E7 之间的空格

      【讨论】:

        【解决方案3】:

        我认为您需要先预处理 txt 文件并写入临时文件。

        with open('test.txt', 'r') as f_in, open('temp.txt', 'w') as f_out:
            for reader in f_in:
                split = reader.split()
                if len(split) == 10:
                    line = ''.join(split[0:2]) + ' ' + ' '.join(split[2:]) + '\n'
                    f_out.write(line)
                else:
                    f_out.write(reader)
        

        现在将临时文件读取到数据框:

        data = pd.read_csv('temp.txt', sep=" ", header=None)
        

        【讨论】:

        • 好的,谢谢它有效,但是为什么第四列000000变成0?
        • 因为 pandas 假设该列是数字。您可以使用data = pd.read_csv('temp.txt', sep=" ", header=None, dtype={3: str}) 解决此问题。如果您需要“+”符号,则同样适用于索引 7 和 8 处的列。
        【解决方案4】:

        您的数据不是 csv(或逗号“分隔值”除外)格式的文件,而是格式化为固定宽度。因此,您需要使用另一个功能。

        data = pd.read_fwf('./test.txt')
        

        您需要指定colspecswidths 参数来指定每列的起始位置。

        edit 如 Scratch'N'Purr 所述,格式并不完全固定

        【讨论】:

        • 第 8 列和第 9 列宽度不固定
        猜你喜欢
        • 1970-01-01
        • 2018-01-07
        • 1970-01-01
        • 2020-07-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多