【问题标题】:Pandas: How to read a "non-flat" csv with multiple headers?Pandas:如何读取具有多个标题的“非平面”csv?
【发布时间】:2021-10-04 22:49:43
【问题描述】:

我需要解析大量csv 文件来填充数据库。 csv 文件的格式令人困惑。这是文件的简化演示,然后我将评论以下内容:

A B C D E F G H I
1 ll 0 10 4.9 50
2 hl 2 20 6.1 60
3 unit km/s second V second
4 param SN part_no date passfail param01 param02 param03 param04
5 ABC11 p1 1/1/2020 pass 1 11 5 54
6 ABC22 p1 1/1/2020 pass 1.5 15 5.5 56
7 ABC33 p2 1/3/2020 fail 6 30 3 57

我需要创建一个 datadataframe(s) 以允许基于以下区域进行选择:

  1. csv[A1:H4] 被视为文件的标题部分。
  2. csv[A1:A4]csv[F1:I43] 的名称。所以,['ll', 'hl', 'unit', 'param'] 是行的名称:1、2、3、4,从 col[F] 开始。
  3. csv[B4:E7]: 是其余列的汇总区域。
  4. csv[F4:I7]:是针对ll(或“下限”)和hl(或“上限”)实际检查的数据详细信息。

使用Pandas,读取此类文件的最有效方法是什么(根据上述定义)?

免责声明:我的问题可能被视为“基于意见”,我不这么认为。我不知道此类文件的最佳做法是什么。


CSV 示例

这是我用来根据 cmets 中的要求对我的代码进行建模的 CSV。有一件事让我的生活更轻松,就是我尽早将第 4 行带到了顶部。

ll,,,,,0,10,4.9,50
hl,,,,,2,20,6.1,60
unit,,,,,km/s,second,V,second
param,SN,part_no,date,passfail,param01,param02,param03,param04
,ABC11,p1,1/1/2020,pass,1,11,5,54
,ABC22,p1,1/1/2020,pass,1.5,15,5.5,56
,ABC33,p2,1/3/2020,fail,6,30,3,57

【问题讨论】:

  • 除了表格,能不能在文末发个CSV示例?
  • 我相信你的意思是 I4 而不是 I43 ?如果您的数据非常具体,那么是否可以只读取然后使用 .loc[] 来提取该部分,对其进行转换并将其作为您需要的 Dataframe 表重新安装?
  • @RaymondToh,不完全是。一个主要区别是我正在使用的文件的大小,以及我必须处理的文件数量。我希望有一种解决方案可以在一个可管理的数据框中读取内容。
  • @EBDS 不错,但实际上是I3

标签: python pandas csv


【解决方案1】:
df1 = pd.read_csv(StringIO(d),nrows=3, header=None,index_col=0).dropna(how='all',axis=1).T
df2 = pd.read_csv(StringIO(d),skiprows=3 ).drop(labels='param',axis=1)
df1
df2

输出

    ll  hl  unit
5   0   2   km/s
6   10  20  second
7   4.9 6.1 V
8   50  60  second

    SN      part_no date passfail param01 param02 param03 param04
0   ABC11   p1      1/1/2020 pass 1.0     11      5.0     54
1   ABC22   p1      1/1/2020 pass 1.5     15      5.5     56
2   ABC33   p2      1/3/2020 fail 6.0     30      3.0     57

【讨论】:

  • 您将如何关联 df2 中的参数 cols 和 df1 中的其余数据?
  • @mbadawi23 相关性是什么意思?您是否要对齐 2 个表格?我不确定相关是什么意思。如果您尝试对齐表格,可能您可以计算前后的列数,然后您就知道如何对齐它们。 len(df1.columns)
猜你喜欢
  • 1970-01-01
  • 2016-12-21
  • 2017-03-26
  • 2023-03-13
  • 1970-01-01
  • 2015-06-24
  • 1970-01-01
  • 2014-04-16
  • 1970-01-01
相关资源
最近更新 更多