【问题标题】:pandas read_csv() for multiple delimiterspandas read_csv() 用于多个分隔符
【发布时间】:2018-01-02 15:30:57
【问题描述】:

我有一个文件,其数据如下

1000000 183:0.6673;2:0.3535;359:0.304;363:0.1835
1000001 92:1.0
1000002 112:1.0
1000003 154435:0.746;30:0.3902;220:0.2803;238:0.2781;232:0.2717
1000004 118:1.0
1000005 157:0.484;25:0.4383;198:0.3033
1000006 277:0.7815;1980:0.4825;146:0.175
1000007 4069:0.6678;2557:0.6104;137:0.4261
1000009 2:1.0

我想将文件读入一个由多个分隔符\t, :, ;分隔的熊猫数据框

我试过了

df_user_key_word_org = pd.read_csv(filepath+"user_key_word.txt", sep='\t|:|;', header=None, engine='python')

它给了我以下错误。

pandas.errors.ParserError: Error could be due to quotes being ignored when a multi-char delimiter is used.

为什么会出现这个错误?

所以我想我会尝试使用正则表达式字符串。但我不确定如何编写拆分正则表达式。 r'\t|:|;'不起作用。

将文件读取到具有多个分隔符的 pandas 数据框的最佳方法是什么?

【问题讨论】:

  • @jezrael 使用捕获组时,不需要管道(实际上管道变成了分隔符)。
  • @cᴏʟᴅsᴘᴇᴇᴅ - 很高兴知道,谢谢 ;)
  • @cᴏʟᴅsᴘᴇᴇᴅ - 顺便说一句,错误意味着我猜数据中存在一些问题,所以不是这个骗局,因为骗局的答案与这个问题中的 OP 使用相同:(
  • @cᴏʟᴅsᴘᴇᴇᴅ 你的意思是说正则表达式字符串应该是 r'\t:;' ?我试过了,它根本没有按数据分开。 df_user_key_word_org = pd.read_csv(filepath+"user_key_word.txt", delimiter=r'\t:;', header=None, engine='python')
  • 不,应该是r'[\t:;]'

标签: pandas


【解决方案1】:

从这个问题Handling Variable Number of Columns with Pandas - Pythonpandas.errors.ParserError: Expected 29 fields in line 11, saw 45. 的一种解决方法是让read_csv 提前知道多少列。

my_cols = [str(i) for i in range(45)] # create some col names
df_user_key_word_org = pd.read_csv(filepath+"user_key_word.txt",
                                   sep="\s+|;|:",
                                   names=my_cols, 
                                   header=None, 
                                   engine="python")
# I tested with s = StringIO(text_from_OP) on my computer

希望这行得通。

【讨论】:

  • 我只是做了类似的事情,我不会发布 b/c 这似乎工作正常。 ;-)
  • @JohnE 我在发布后立即看到了您的评论:D
  • 让 read_csv 提前知道多少行 - 但是 my_cols??有点混乱,行还是列?
  • @SunKe 感谢您的关注,应该是 my_cols :)
  • @user408108 函数中有一个names 参数。
猜你喜欢
  • 2015-09-20
  • 2017-10-25
  • 1970-01-01
  • 2017-05-05
  • 2017-07-06
  • 2017-06-25
  • 2018-07-12
  • 2020-12-30
  • 1970-01-01
相关资源
最近更新 更多