read_csv移位列并跳过错误的行

时间:2019-09-21 20:01:41

标签: pandas csv

我正在使用熊猫read_csv将CSV文件导入Jupyter笔记本中。

您可以找到CSV file at this link。在标题行之前有两个空行。 当我使用时:

df = pd.read_csv('data/2008-03-21_downloaded.csv', skiprows= 2)

结果df的所有列标题都移了。

如果我添加index_col=False

df = pd.read_csv('data/2008-03-21_downloaded.csv', skiprows=[1,2], index_col=False)

结果使用一行数据作为标题,而不是实际的标题名称。

我似乎无法跳过前两行,而是使用实际的标头作为标头[帐户,帐户名,金额等...]

2 个答案:

答案 0 :(得分:1)

您的第一版代码还可以。最初的两行为空,应 被跳过。

但是请注意,输入文件中的列名之一(请参见 DATA 视图- 在一段时间内您的帖子中包含)%2C , 这是逗号的十六进制代码。

因此,显然您的标题行已损坏,这就是为什么 DATA 视图中有一堆列标题为 Unnamed

一种选择是使用标题行中的详细信息进行排序(替换 每个“%2C”都带有逗号),然后重复阅读。

另一个选择是:

  • 传递 skiprows = 3 参数(也跳过标题行),
  • 通过 names 参数为所有列使用正确的列名。

您的第二个版本的代码是错误的,因为行计数从 。 Excel中的行号不要误导,行号从一个开始。

答案 1 :(得分:0)

修复您的csv文件:

  • 如前所述,标题有点混乱。以下代码将%2CTXT_%2C替换为,
  • 仅当您有多个需要修复的文件时,这才是必需的
  • 您可以根据需要添加其他修复程序。
  • pathlib是标准库的一部分
from pathlib import Path

p = Path('some_path')
files = p.rglob('*.csv')  # files in top dir and all subdirs


for file in files:
    file_updated = file.parents[0] / f'{file.stem}_updated{file.suffix}'
    with file.open('r') as f:
        with file_updated.open('w') as f2:
            for cnt, line in enumerate(f):
                if 'ACCOUNT NAME' in line.split(','):
                    print(cnt, line)
                    line = line.replace('%2CTXT_', ',')
                    line = line.replace('%2C', ',')
                    print(cnt, line)

                f2.write(line)
  • 当我下载并测试文件时,脚本没有读取标题前的其他行,我认为这与帐户前的有关。
  • 我们将创建一个新文件,而不是覆盖旧文件,并在_updated后面附加stem

_updated文件读入单个数据帧:

p = Path('some_path')
files = p.rglob('*_updated.csv')

df = pd.concat([pd.read_csv(file) for file in files])