python - 使用 pandas 读取 csv 文件,其中列由不同数量的空格和逗号分隔

标签 python pandas

我想将 csv 文件作为 pandas 数据框读取。 CSV 文件位于:https://www.dropbox.com/s/o3xc74f8v4winaj/aaaa.csv?dl=0

特别是,

  1. 我想跳过第一行

  2. 列标题位于第 2 行。在本例中,它们是:1、1、2 和 TOT。但我不想对它们进行硬编码。如果唯一提取的列是 TOT 就可以了

  3. 如果可能的话,我不想使用非 pandas 方法。

这就是我正在做的事情:

df = pandas.read_csv('https://www.dropbox.com/s/o3xc74f8v4winaj/aaaa.csv?dl=0', skiprows=1, skipinitialspace=True, sep=' ')

但这给出了错误:

*** CParserError: Error tokenizing data. C error: Expected 5 fields in line 4, saw 6

输出应如下所示:

                    1       1       2     TOT
0   DEPTH(m)        0.01    1.24    1.52    
1   BD  33kpa(t/m3) 1.6     1.6     1.6
2   SAND(%)         42.1    42.1    65.1    
3   SILT(%)         37.9    37.9    16.9    
4   CLAY(%)         20      20      18  
5   ROCK(%)         12      12      12  
6   WLS(kg/ha)      0       5       0.1    5.1
7   WLM(kg/ha)      0       5       0.1    5.1
8   WLSL(kg/ha)     0       4       0.1    4.1
9   WLSC(kg/ha)     0       2.1     0      2.1
10  WLMC(kg/ha)     0       2.1     0      2.1
11  WLSLC(kg/ha)    0       1.7     0      1.7
12  WLSLNC(kg/ha)   0       0.4     0      0.4
13  WBMC(kg/ha)     9       1102.1  250.9   1361.9
14  WHSC(kg/ha)     69      8432    1920    10420
15  WHPC(kg/ha)     146     18018   4102    22266
16  WOC(kg/ha)      224     27556   6272    34
17  WLSN(kg/ha)     0       0       0       0
18  WLMN(kg/ha)     0       0.2     0       0.2
19  WBMN(kg/ha)     0.9     110.2   25.1    136.2
20  WHSN(kg/ha)     7       843     192     1042
21  WHPN(kg/ha)     15      1802    410     2227
22  WON(kg/ha)      22      2755    627     3405
23  CFEM(kg/ha)     0           

最佳答案

您可以指定一个正则表达式用作分隔符,在您的情况下,它将与 [\s,]{2,20} 配合使用,即 2 个或更多空格或逗号:

In [180]: pd.read_csv('aaaa.csv', 
                      skiprows = 1, 
                      sep='[\s,]{2,20}',
                      index_col=0)
Out[180]:
         Unnamed: 1       1       1.1        2      TOT
0
1          DEPTH(m)    0.01      1.24     1.52      NaN
2    BD 33kpa(t/m3)    1.60      1.60     1.60      NaN
3           SAND(%)   42.10     42.10    65.10      NaN
4           SILT(%)   37.90     37.90    16.90      NaN
5           CLAY(%)   20.00     20.00    18.00      NaN
6           ROCK(%)   12.00     12.00    12.00      NaN
7        WLS(kg/ha)    0.00      5.00     0.10      5.1
8        WLM(kg/ha)    0.00      5.00     0.10      5.1
9       WLSL(kg/ha)    0.00      4.00     0.10      4.1
10      WLSC(kg/ha)    0.00      2.10     0.00      2.1
11      WLMC(kg/ha)    0.00      2.10     0.00      2.1
12     WLSLC(kg/ha)    0.00      1.70     0.00      1.7
13    WLSLNC(kg/ha)    0.00      0.40     0.00      0.4
14      WBMC(kg/ha)    9.00   1102.10   250.90   1361.9
15      WHSC(kg/ha)   69.00   8432.00  1920.00  10420.0
16      WHPC(kg/ha)  146.00  18018.00  4102.00  22266.0
17       WOC(kg/ha)  224.00  27556.00  6272.00     34.0
18      WLSN(kg/ha)    0.00      0.00     0.00      0.0
19      WLMN(kg/ha)    0.00      0.20     0.00      0.2
20      WBMN(kg/ha)    0.90    110.20    25.10    136.2
21      WHSN(kg/ha)    7.00    843.00   192.00   1042.0
22      WHPN(kg/ha)   15.00   1802.00   410.00   2227.0
23       WON(kg/ha)   22.00   2755.00   627.00   3405.0
24      CFEM(kg/ha)    0.00       NaN      NaN      NaN
25,            None     NaN       NaN      NaN      NaN
26,            None     NaN       NaN      NaN      NaN

关于python - 使用 pandas 读取 csv 文件,其中列由不同数量的空格和逗号分隔,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33862383/

相关文章:

python - VSCode : Auto import/import suggestions for Python dependencies from external libraries

python - 将字典转换为方阵

python - 如何在数据框中强制 dtype 为整数

python - Pandas:比较列表值并写入新列

python - 在循环中更新一行,然后在下一次迭代中使用更新后的值

python - 使用 seaborn 合并不同线图的图例

Python - 基于多个过滤器搜索文件名的有效方法

python - Python 中的 Julia 映射切片功能等效

Python数据框在多列中删除负值

python - 如何在 pandas groupby 中正确使用变量?