python - 将文件读入 Pandas 数据框中,其中行按日期分组

标签 python pandas

文件是一种类似 CSV 的格式,其中行按日期分组,包含日期以外信息的行中会省略日期信息。此类格式可以通过在其标题行中包含“/”字符来识别。

start_date / lat,lon,tmax
1979-01-01
27,261,10.522
27,262,11.772
28,261,9.205
1979-01-02
27,261,10.139
27,262,10.913
28,261,8.982

当前使用以下代码:

import numpy as np
import pandas as pd
pd.read_csv(fileName, delimiter = ',')

给出输出

    start_date / lat    lon tmax
0   1979-01-01  NaN NaN
1   27  261.0   10.522
2   27  262.0   11.772
3   28  261.0   9.205
4   1979-01-02  NaN NaN
5   27  261.0   10.139
6   27  262.0   10.913
7   28  261.0   8.982

期望的输出。

    start_date    lat    lon    tmax
0   1979-01-01    27    261.0   10.522
1   1979-01-01    27    262.0   11.772
2   1979-01-01    28    261.0   9.205
3   1979-01-02    27    261.0   10.139
4   1979-01-02    27    262.0   10.913
5   1979-01-02    28    261.0   8.982

如何将这样的文件读入 pandas dataframe 并获得所需的输出?

最佳答案

灵活的换档:

df = pd.read_csv(filename, sep='\s+/\s+|,', skipinitialspace=True)
df = df.apply(lambda s: s.shift(1), 1).apply(lambda s: s.shift(-1) if pd.isna(s[-1]) else s, 1)
df['start_date'].fillna(method='ffill', inplace=True)
df = df.dropna().reset_index(drop=True)

生成的df:

   start_date lat    lon    tmax
0  1979-01-01  27  261.0  10.522
1  1979-01-01  27  262.0  11.772
2  1979-01-01  28  261.0   9.205
3  1979-01-02  27  261.0  10.139
4  1979-01-02  27  262.0  10.913
5  1979-01-02  28  261.0   8.982

pandas.Series.shift

关于python - 将文件读入 Pandas 数据框中,其中行按日期分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57230552/

相关文章:

python - 使用 pyOpenSSL 获取 .pfx 证书文件过期

python - OpenCV-清理内存

Python 时间(以毫秒为单位)

python - 如何使用前一行值以及同一行中其他列中的值来计算 Pandas 中列的值

python - matplotlib 的 plt.acorr 中自相关图的错误?

java - python中处理excel文件的最佳库是什么?

python - 如何通过主题建模制作主题的百分比条形图?

pandas - 累积和数据框的条件计数 - 循环列

python - 如何通过处理连续换行符等情况来读取csv文件?

python - 根据 Pandas 中的模式复制 Dataframe 中的行