我正在尝试使用 pandas 中的 df.loc 来定位数据框中的部分变量值。
在我的数据框中,时间和日期相结合 例如
Time Col1 Col2
1-1-2019 01:00 5 7
1-1-2019 02:00 6 9
1-2-2019 01:00 8 3
如果我使用df.loc[df['Time'] == ['1-1-2019']]
我想找到该数据帧的前两列,即 1-1-2019 01:00 和 1-1-2019 02:00。
它给了我一个错误:长度必须匹配。公平地说,这对 pandas 来说是一个逻辑错误,因为我只输入日期,而不是时间。
有没有办法让搜索值部分可变?那么 pandas 会寻找 1-1-2019 01:00 和 1-1-2019 02:00 吗?
最佳答案
第一个想法是删除时间,最好通过 Series.dt.floor
设置为 0
或Series.dt.normalize
:
df['Time'] = pd.to_datetime(df['Time'])
df1 = df.loc[df['Time'].dt.floor('d') == '2019-01-01']
#alternative
#df1 = df.loc[df['Time'].dt.normalize() == '2019-01-01']
print (df1)
Time Col1 Col2
0 2019-01-01 01:00:00 5 7
1 2019-01-01 02:00:00 6 9
或者按 Series.dt.date
比较日期:
from datetime import date
df['Time'] = pd.to_datetime(df['Time'])
df1 = df.loc[df['Time'].dt.date == date(2019,1,1)]
#in some version should working
#df1 = df.loc[df['Time'].dt.date == '2019-01-01']
或者通过Series.dt.strftime
转换为字符串YYYY-MM-DD
并比较:
df['Time'] = pd.to_datetime(df['Time'])
df1 = df.loc[df['Time'].dt.strftime('%Y-%m-%d') == '2019-01-01']
关于python - 使用 Python Pandas df.loc 定位部分变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59983811/