【发布时间】:2021-06-14 22:29:23
【问题描述】:
大家好,我有一个数据框 ready_df,如下所示:
| timestamp | Latitude_1 | Longtitude_1 | Name | Latitude_2 | Longtitude_2 |
|---|---|---|---|---|---|
| 2021-03-03 08:00:00.100 | NaN | NaN | NaN | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.300 | NaN | NaN | NaN | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.500 | 12.3456 | 12.3456 | Billy | NaN | NaN |
我必须用 Latitude_2 Longtitude_2 == Latitude_1 Longtitude_1 的值填充列 Name
我创建了一个函数,我称之为filler(),这是函数的代码:
def filler(Nan_lon, Full_lon, Nan_lat, Full_lat, Designated_col):
if ready_df[Nan_lon] == ready_df[Full_lon].iloc[1] and ready_df[Nan_lan] == ready_df[Full_lan].iloc[1]:
return ready_df[Designated_col].iloc[1]
elif ready_df[Nan_lon] == ready_df[Full_lon].iloc[2] and ready_df[Nan_lan] == ready_df[Full_lan].iloc[2]:
return ready_df[Designated_col].iloc[2]
elif ready_df[Nan_lon] == ready_df[Full_lon].iloc[3] and ready_df[Nan_lan] == ready_df[Full_lan].iloc[3]:
return ready_df[Designated_col].iloc[3]
else:
return np.NaN
如果前面的 2 行是 nan,我想检查当前行前面最多 3 行,否则我想返回 nan。但是,当我使用它来填充这样的列时:
ready_df['NAME'] = ready_df.apply(lambda x: filler(Nan_lon=x.Longtitude_2, Full_lon=x.Longtitude_1,
Nan_lat=x.Latitude_2, Full_lat=x.Latitude_1,
Designated_col=ready_df['NAME']))
我收到一个错误:AttributeError: 'Series' object has no attribute 'Longitude'
整个想法是填充列Name - 然后我计划更改每列的函数,以便我为每个 NaN 填充正确的值。数据框有 130k 行。您能否解释一下为什么我的功能不起作用并提出任何改进建议,谢谢:)
编辑:
| timestamp | Latitude_1 | Longtitude_1 | Name | Latitude_2 | Longtitude_2 |
| --------- | ---------- | ------------ | ---- | ---------- | ------------ |
| 2021-03-03 08:00:00.100 | NaN | NaN | NaN | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.300 | NaN | NaN | NaN | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.500 | 12.3456 | 12.3456 | Billy | NaN | NaN |
| 2021-03-03 08:00:00.700 | 21.345| 21.345| John| NaN | NaN |
| 2021-03-03 08:00:00.900 | 21.345| 21.345| John| NaN | NaN |
| 2021-03-03 08:00:01.100 | 12.3456 | 12.3456 | Billy | NaN | NaN |
| 2021-03-03 08:00:01.300 | NaN | NaN | NaN | 21.345| 21.345|
| 2021-03-03 08:00:01.500 | NaN | NaN | NaN | 21.345| 21.345|
| 2021-03-03 08:00:01.700 | 12.3456 | 12.3456 | Billy | NaN | NaN |
预期输出:
| timestamp | Latitude_1 | Longtitude_1 | Name | Latitude_2 | Longtitude_2 |
|---|---|---|---|---|---|
| 2021-03-03 08:00:00.100 | 12.3456 | 12.3456 | Billy | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.300 | 12.3456 | 12.3456 | Billy | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.500 | 12.3456 | 12.3456 | Billy | 12.3456 | 12.3456 |
| 2021-03-03 08:00:00.700 | 21.345 | 21.345 | John | 21.345 | 21.345 |
| 2021-03-03 08:00:00.900 | 21.345 | 21.345 | John | 21.345 | 21.345 |
| 2021-03-03 08:00:01.100 | 12.3456 | 12.3456 | Billy | 12.3456 | 12.3456 |
| 2021-03-03 08:00:01.300 | 21.345 | 21.345 | John | 21.345 | 21.345 |
| 2021-03-03 08:00:01.500 | 21.345 | 21.345 | John | 21.345 | 21.345 |
| 2021-03-03 08:00:01.700 | 12.3456 | 12.3456 | Billy | 12.3456 | 12.3456 |
【问题讨论】:
标签: python pandas dataframe function apply