【问题标题】:Pandas ffill() to fill missing dataPandas ffill() 填充缺失数据
【发布时间】:2022-11-02 23:29:54
【问题描述】:

我目前正在尝试在如下所示的数据框中填充空白:

       AL|ATFC|Year Latitude Longitude
0      AL011851      NaN       NaN
1           NaN    28.0N     94.8W
2           NaN    28.0N     95.4W
3           NaN    28.0N     96.0W
4           NaN    28.1N     96.5W
5           NaN    28.2N     96.8W
6           NaN    28.2N     97.0W
7           NaN    28.3N     97.6W
8           NaN    28.4N     98.3W
9           NaN    28.6N     98.9W
10          NaN    29.0N     99.4W
11          NaN    29.5N     99.8W
12          NaN    30.0N    100.0W
13          NaN    30.5N    100.1W
14          NaN    31.0N    100.2W
15     AL021851      NaN       NaN
16          NaN    22.2N     97.6W
17     AL031851      NaN       NaN
18          NaN    12.0N     60.0W

我一直在尝试下面的代码行,目的是用 pandas ffill() 函数填充我有 NaN 值的 AL|ATFC|Year 列。

df.where(df['AL|ATFC|Year'] == float('NaN'), df['AL|ATFC|Year'].ffill(), axis=1, inplace=True)

获取以下数据框:

    AL|ATFC|Year Latitude Longitude
0      AL011851      NaN       NaN
1      AL011851    28.0N     94.8W
2      AL011851    28.0N     95.4W
3      AL011851    28.0N     96.0W
4      AL011851    28.1N     96.5W
5      AL011851    28.2N     96.8W
6      AL011851    28.2N     97.0W
7      AL011851    28.3N     97.6W
8      AL011851    28.4N     98.3W
9      AL011851    28.6N     98.9W
10     AL011851    29.0N     99.4W
11     AL011851    29.5N     99.8W
12     AL011851    30.0N    100.0W
13     AL011851    30.5N    100.1W
14     AL011851    31.0N    100.2W
15     AL021851      NaN       NaN
16     AL021851    22.2N     97.6W
17     AL031851      NaN       NaN
18     AL031851    12.0N     60.0W

此后,我正在计划丢失 Lon/Lat 值的放置行。但是,我一直在尝试使用的代码无法填充AL|ATFC|Year 列中的缺失值,我不明白为什么......任何帮助将不胜感激!

谢谢

【问题讨论】:

  • 您可以将 DF 作为代码共享吗? NaN 是浮点数,它可能会转换为字符串,因为值是字母数字。
  • 数据框实际上要大得多,并从 csv 读取。我可以确认 NaN 值是浮点数,AL|ATFC|Year 中的现有值是字符串。
  • 从您的示例创建 DF,它对我有用。检查有效值之后的第一个空值类型。类型(df['AL|ATFC|Year'].iloc[1])

标签: python pandas dataframe nan ffill


【解决方案1】:

您可以将'AL|ATFC|Year' NaN 替换为np.nan,然后使用fillna 函数。我只复制了前 3 行:


import pandas as pd

data = {'AL|ATFC|Year' : ['AL011851', 'NaN', 'NaN'],
        'Latitude': ['NaN', '28.0N', '28.0N'],
        'Longitude': ['NaN', '94.8W', '95.4W']}

df = pd.DataFrame(data)

df['AL|ATFC|Year'].replace('NaN', np.nan, inplace=True)
df['AL|ATFC|Year'].fillna(method='ffill', inplace=True)

输出:

  AL|ATFC|Year Latitude Longitude
0     AL011851      NaN       NaN
1     AL011851    28.0N     94.8W
2     AL011851    28.0N     95.4W

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-02-28
    • 1970-01-01
    • 2020-11-18
    • 2021-06-17
    • 1970-01-01
    相关资源
    最近更新 更多