用真实值替换日期列中的未命名值

Replace Unnamed values in date column with true values

我正在处理这个需要清理的原始数据框。至此,我已经转换了这个xlsx文件

进入这个 pandas 数据框:

print(df.head(16))
                   date technician alkalinity colour     uv    ph turbidity  \
0   2020-02-01 00:00:00  Catherine       24.5     33   0.15  7.24      1.53   
1            Unnamed: 2        NaN        NaN    NaN    NaN   NaN      2.31   
2            Unnamed: 3        NaN        NaN    NaN    NaN   NaN      2.08   
3            Unnamed: 4        NaN        NaN    NaN    NaN   NaN       2.2   
4            Unnamed: 5     Michel         24     35  0.152  7.22      1.59   
5            Unnamed: 6        NaN        NaN    NaN    NaN   NaN      1.66   
6            Unnamed: 7        NaN        NaN    NaN    NaN   NaN      1.71   
7            Unnamed: 8        NaN        NaN    NaN    NaN   NaN      1.53   
8   2020-02-02 00:00:00  Catherine         24    NaN  0.145  7.21      1.44   
9           Unnamed: 10        NaN        NaN    NaN    NaN   NaN      1.97   
10          Unnamed: 11        NaN        NaN    NaN    NaN   NaN      1.91   
11          Unnamed: 12        NaN        NaN   33.0    NaN   NaN      2.07   
12          Unnamed: 13     Michel         24     34   0.15  7.24      1.76   
13          Unnamed: 14        NaN        NaN    NaN    NaN   NaN      1.84   
14          Unnamed: 15        NaN        NaN    NaN    NaN   NaN      1.72   
15          Unnamed: 16        NaN        NaN    NaN    NaN   NaN      1.85   

   temperature  
0            3  
1          NaN  
2          NaN  
3          NaN  
4            3  
5          NaN  
6          NaN  
7          NaN  
8            3  
9          NaN  
10         NaN  
11         NaN  
12           3  
13         NaN  
14         NaN  
15         NaN

从这里开始,我想合并行,以便每个日期只有一行。每行的值将是相应列中的平均值。即

print(new_df.head(2))
          date      time  alkalinity  colour     uv    ph  turbidity  temperature
0   2020-02-01  00:00:00       24.25      34  0.151  7.23       1.83            3
1   2020-02-02  00:00:00          24    33.5  0.148  7.23       1.82            3

当我的日期列中有未命名值时,我该如何完成此操作?谢谢!

如果我理解正确的话,您想删除日期列中包含 'Unnamed' 的行,对吗?

请看这里:

解决方案是这样的:

df = df.drop(df['Unnamed' in df.date].index)

编辑:

No, I would like to replace those Unnamed values with the date so I could then use the groupby('date') function to return the mean values for the columns

所以在这种情况下你应该遍历整个 table

last_date = ''
for i in df.index:
    if 'Unnamed' not in df.at[i, 'date']:
        last_date = df.at[i, 'date']
    else:
        df.at[i, 'date'] = last_date

如果 'date' 列是对象类型,即字符串 然后只需编写一个逻辑来遍历数字 如提供的图像所示 它遵循 特定模式 -

for _ in range(2,9):
    df.loc[(df['date'] == 'Unnamed: '+str(_), 'date'] = your_value

尝试将值设置为 NaN,然后使用 ffill:

df.loc[df.date.str.contains('Unnamed', na=False), 'date'] = np.nan

df.date = df.date.ffill()