【问题标题】:Replace Unnamed values in date column with true values用真值替换日期列中的未命名值
【发布时间】:2021-11-26 01:10:29
【问题描述】:

我正在处理这个需要清理的原始数据框。到目前为止,我已经转换了这个 xlsx 文件

进入这个熊猫数据框:

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

当我的日期列中有未命名的值时,我该如何做到这一点?谢谢!

【问题讨论】:

  • 我会建议 pandas groupby 功能,但是,如果那些未命名的值没有用,那么它们可以被过滤掉吗?
  • 我需要使用这些值来计算平均值。如果你看一下上面的 xlsx 文件,日期跨越了 8 列。
  • 好的,那么您将必须知道哪个未命名属于哪个日期以及在数据转换后执行 groupby
  • 是的,这就是我一直在问的。如何将日期列中的Unnamed 值替换为真实日期?
  • 好的,我已经发布了一个可以参考的解决方案或给出的其他答案。

标签: python pandas dataframe pandas-groupby nan


【解决方案1】:

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

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

df.date = df.date.ffill()

【讨论】:

  • ValueError: Cannot mask with non-boolean array containing NA / NaN values
  • 尝试设置na=False。更新了答案。
【解决方案2】:

如果我理解,您想在日期列中删除包含“未命名”的行,对吗?

请看这里: https://stackoverflow.com/a/27360130/12790501

解决方案是这样的:

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

编辑:

不,我想用日期替换那些未命名的值,所以我 然后可以使用 groupby('date') 函数返回平均值 对于列

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

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

【讨论】:

  • 不,我想用日期替换那些Unnamed 值,这样我就可以使用groupby('date') 函数返回列的平均值
  • 好的,我已经更新答案了
  • TypeError: argument of type 'datetime.datetime' is not iterable
【解决方案3】:

如果“日期”列是对象类型,即字符串 然后只需编写一个逻辑来循环数字如提供的图像中所示它遵循某些模式-

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

【讨论】:

    猜你喜欢
    • 2021-06-11
    • 2021-11-20
    • 1970-01-01
    • 2017-10-31
    • 2021-10-04
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多