dropna弄乱了日期时间索引

2024-10-02 12:30:07 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个处理数据帧的函数。此数据帧中的行由日期时间索引索引,并且数据帧中每小时有一行。 基本上,经过一些处理后,我得到的是:

                     inquinante  temperatura  precipitazioni  ...  umidita  day_of_year  day_of_week
Data                                                          ...                                   
2000-07-04 00:00:00        55.0         23.9             0.0  ...     86.8          186            1
2000-07-04 01:00:00         NaN         23.4             0.0  ...     86.2          186            1
2000-07-04 02:00:00         NaN         22.7             0.0  ...     92.5          186            1
2000-07-04 03:00:00         NaN         22.1             0.0  ...     97.5          186            1
2000-07-04 04:00:00         NaN         22.2             0.0  ...     95.9          186            1

现在,我想筛选出列'inquinante'的值为NaN的行,因此我编写了以下代码行:

df = df.dropna(subset=["inquinante"])

但我在它执行后得到的是:

           inquinante  temperatura  precipitazioni  ...    umidita  day_of_year  day_of_week
Data                                                 ...                                     
2014-01-31        25.0     4.700000        1.000000  ...  95.700000           31            4
2014-02-01        31.0     5.800000        0.000000  ...  94.800000           32            5
2014-02-02        20.0     6.100000        1.800000  ...  97.300000           33            6
2014-02-03        17.0     6.700000        0.600000  ...  96.300000           34            0
2014-02-04        18.0     6.600000        0.800000  ...  97.200000           35            1

为什么现在我的约会是按天而不是按小时来安排的? 我还尝试将代码行更改为:

df = df[df.inquinante >= 0]
#or
df = df[df.inquinante.notna()]

但这些似乎都无法解决问题。我有没有办法解决这个问题,防止熊猫把我的约会分组

提前谢谢


Tags: of数据代码dfdatananyear约会
3条回答

你可以试试这样的东西-

temp = df.reset_index()
temp = temp[temp['inquinante'].notna()].set_index('Data')

当所有索引标签的时间戳为午夜或时间00:00:00时,这是datetime索引的自动表示形式

df = pd.DataFrame({'value':np.arange(20)}, index=pd.date_range('2020-02-01', periods=20, freq='12H'))
df 

输出:

                     value
2020-02-01 00:00:00      0
2020-02-01 12:00:00      1
2020-02-02 00:00:00      2
2020-02-02 12:00:00      3
2020-02-03 00:00:00      4
2020-02-03 12:00:00      5
2020-02-04 00:00:00      6
2020-02-04 12:00:00      7
2020-02-05 00:00:00      8
2020-02-05 12:00:00      9
2020-02-06 00:00:00     10
2020-02-06 12:00:00     11
2020-02-07 00:00:00     12
2020-02-07 12:00:00     13
2020-02-08 00:00:00     14
2020-02-08 12:00:00     15
2020-02-09 00:00:00     16
2020-02-09 12:00:00     17
2020-02-10 00:00:00     18
2020-02-10 12:00:00     19

现在,让我们放下所有时间,其中小时=12,只留下午夜时间戳:

df[df.index.hour != 12]

输出:

            value
2020-02-01      0
2020-02-02      2
2020-02-03      4
2020-02-04      6
2020-02-05      8
2020-02-06     10
2020-02-07     12
2020-02-08     14
2020-02-09     16
2020-02-10     18

这仍然是一个datetimeindex,每个标签都有一个时间戳

df[df.index.hour != 12].index.strftime('%Y-%m-%d %H:%M:%S')

输出:

Index(['2020-02-01 00:00:00', '2020-02-02 00:00:00', '2020-02-03 00:00:00',
       '2020-02-04 00:00:00', '2020-02-05 00:00:00', '2020-02-06 00:00:00',
       '2020-02-07 00:00:00', '2020-02-08 00:00:00', '2020-02-09 00:00:00',
       '2020-02-10 00:00:00'],
      dtype='object')

如果只更改了日期的格式而没有更改值,则始终可以按如下方式将其转换回:

df['Date'] = df['Date'].dt.strftime('%Y-%m-%d %H:%M:%S')

相关问题 更多 >

    热门问题