【问题标题】:How to read CSV in pandas when one column is pipe delimted?当一列用管道分隔时,如何在熊猫中读取 CSV?
【发布时间】:2020-07-06 20:52:12
【问题描述】:

您好,我有一个这样结构的 CSV

ColA          ColB
entry1    A|B|C|D|E|F

我想使用 read_csv 方法在 pandas 中读取文件,我需要输出为

ColA    ColB1 colB2 colB3 ...
entry1    A     B     C   ...

实现此目的最简洁的方法是什么?

【问题讨论】:

  • 不确定这是否可能,我认为最好的办法是读取数据,然后在 ColB 中执行拆分
  • 你已经尝试了什么?那是怎么失败的?这里没有证据表明您已经做出了善意的努力来自己解决这个问题。如果您需要有人为您编写代码,可以提供相应的服务,StackOverflow 不是其中之一。
  • 我尝试了pd.read_csv('data.csv', sep="|"),但没有成功。因此在我的帖子中使用“最干净”,我想看看是否有一个班轮可以做到这一点,但也许这不是我要问的原因。

标签: python python-3.x pandas csv dataframe


【解决方案1】:

假设test.csv 是:

ColA;ColB
entry1;A|B|C|D|E|F

这里有一个解决方案:

import pandas as pd
df = pd.read_csv('test.csv', sep=';')
df[['ColB1','ColB2', 'ColB3', 'ColB4', 'ColB5', 'ColB6']] = df['ColB'].str.split("|",expand=True,)
df = df.drop(columns=['ColB'])
print(df)

输出:

     ColA ColB1 ColB2 ColB3 ColB4 ColB5 ColB6
0  entry1     A     B     C     D     E     F

来源:https://cmdlinetips.com/2018/11/how-to-split-a-text-column-in-pandas/

【讨论】:

  • 这看起来不错,但是如果colB 中的不同行有不同数量的元素呢?例如,第 1 行是 A|B|C|D|E|F,但第 2 行可能是 foo|bar,第 3 行可能是 peanut butter|chocolate|cookie|ice cream,第 4 行可能是 A|B|C|D|E|F|G|H,我该如何解释?
  • 好问题@mafyiful!也许,您可以预处理 CSV 以添加足够的 | 作为相关数据的后缀。但显然你不在经典的 CSV 范围内,它是你在这里拥有的一种“自定义文件格式”,每行有两个分隔符和可变数量的列,所以我宁愿在每一行上循环并手动解析,在喂给pandas之前。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-21
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 2013-03-23
  • 1970-01-01
相关资源
最近更新 更多