文本中使用的Pandas read_csv()分隔符



我有一个CSV文件,其中包含"quot;像这样做的分离器:

col1;col2;col3;col4 
4;hello;world;1;1
4;hi;1;1
4;hi;1;1
4;hi;1;1

显然,通过使用"作为sep,它给了我关于标记数据的错误(显然,从标题中可以看到更少的列(,我如何获得这样的数据帧:

col1 col2        col3 col4 
4    hello;world 1    1
4    hi          1    1
4    hi          1    1
4    hi          1    1

即使使用其他包和其他数据类型也可以读取它(即使我更喜欢panda,因为代码中有以下操作(

您可以拆分外部列,直到剩下剩余的col2。这可以在Pandas中完成,如下所示:

import pandas as pd
df_raw = pd.read_csv("input.csv", delimiter=None, header=None, skiprows=1)
df_raw[['col1', 'rest']] = df_raw[0].str.split(";", n=1, expand=True)
df_raw[['col2', 'col3', 'col4']] = df_raw.rest.str.rsplit(";", n=2, expand=True)
df =  df_raw[['col1', 'col2', 'col3', 'col4']]
print(df)

给定df为:

col1         col2 col3 col4
0    4  hello;world    1    1
1    4           hi    1    1
2    4           hi    1    1
3    4           hi    1    1
  1. 在不使用任何分隔符的情况下首次读取CSV文件以获得一列。

  2. 使用.str.split()n=1,使用左侧的;分隔符仅拆分出col1

  3. 取剩余的rest,并将.str.rsplit()n=2一起使用;分隔符进行反向拆分,以获得剩余的列。这允许col2具有任意字符。

这假设只有col2可以有额外的;分隔符,最后两个是固定的。

import re
pattern = r"(?<=;)(?P<second_column>[w]+;[w]+)(?=;)"
with open("bad_csv.csv") as file:
text = file.readlines()
for i in range(len(text)):
if text[i].count(';') == 4:
text[i] = re.sub(pattern, '"' + r"g<second_column>" + '"', text[i], 1)
with open("good_csv.csv", "w") as file:
for row in text:
file.writelines(row)

df = pd.read_csv("good_csv.csv", sep=';')

相关内容

  • 没有找到相关文章

最新更新