【问题标题】:Python Pandas - findall() not returning all columnsPython Pandas - findall() 不返回所有列
【发布时间】:2021-09-15 11:02:03
【问题描述】:

我的 DataFrame 中有以下数据

我想通过应用其中一个过滤器(获取属于当前月份的所有数据)来创建另一个 DataFrame。
为此,我使用以下代码:

search = '2021-07'
month_dataframe=all_dataframe["date"].str.findall(str(search))

我认为过滤器运行正常,因为当我打印month_dataframe 时,我可以看到数据,但它只返回date 列数据,我想要来自all_dataframe 的所有列/数据。

【问题讨论】:

  • 如果您需要布尔系列,请使用 Series.str.contains
  • df[df['Date'].str.contains(search)]
  • 你的日期栏是什么类型的?

标签: python python-3.x pandas dataframe python-2.7


【解决方案1】:

输入df

    Name    date    address
0   A   2021-07-03  X
1   B   2021-07-03  Y
2   C   2021-07-03  Z
3   D   2021-08-01  M
4   E   2021-08-01  N
5   F   2021-08-01  O

如果 date col 是对象/字符串类型,我们希望保持原样

search = '2021-07'
month_dataframe = df[df["date"].str.contains(str(search))]
month_dataframe

如果 date col 是 object/str 类型,我们可以将其转换为 datetime

在这种情况下的好处是我们不需要定义变量search = '2021-07',而且这个解决方案适用于每个(当前)月份。

df['date'] = pd.to_datetime(df.date)
month_dataframe =  df[df.date.dt.month == pd.Timestamp('today').month]
month_dataframe

如果日期列是日期时间类型

(只是一种选择,不是最好的方法)

search = '2021-07'
month_dataframe = df[df["date"].astype(str).str.contains(str(search))]
month_dataframe

输出

    Name    date    address
0   A   2021-07-03  X
1   B   2021-07-03  Y
2   C   2021-07-03  Z

【讨论】:

  • 它的类型是Object
  • 只需从过滤器中删除.astype(str)。更新了答案。
【解决方案2】:

尝试更改列数据类型并使用过滤器选项。

【讨论】:

    猜你喜欢
    • 2019-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多