python - 使用 Python Pandas df.loc 定位部分变量值

标签 python pandas dataframe

我正在尝试使用 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 设置为 0Series.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/

相关文章:

python - Pandas 解析 csv 错误 - 预期 1 个字段找到 9

python - 如何交换pandas DataFrame中值和索引的角色?

python - 如何使用 Pandas 将字符串转换为数据表excel?

python - MultiValueDictKeyError - 传递 GET 参数

python int( ) 函数

python - 在 python 中重新定位子列表的最快方法

python - 在 Python ODBC 中使用 Microsoft Access SQL 运算符

python - 将一个数据集中的值替换为另一个数据集中的值的有效方法

R 如何计算数据框中行之间的差异

python - 根据另一个 DataFrame 选择一个 DataFrame 的列