检查整个 pandas 对象列是否是字符串

A H*_*A H 2 python pandas

即使数据类型是对象,如何检查列是否是字符串或其他类型(例如 int 或 float)?

(理想情况下,我希望此操作矢量化,而不是applymap检查每一行......)

import io
# American post code
df1_str = """id,postal
1,12345
2,90210
3,"""
df1 = pd.read_csv(io.StringIO(df1_str))
df1["postal"] = df1["postal"].astype("O")  # is an object (of type float due to the null row 3)
Run Code Online (Sandbox Code Playgroud)
# British post codes
df2_str = """id,postal
1,EC1
2,SE1
3,W2"""
df2 = pd.read_csv(io.StringIO(df2_str))
df2["postal"] = df2["postal"].astype("O")  # is an object (of type string)
Run Code Online (Sandbox Code Playgroud)

执行时两者df1df2返回objectdf["postal"].dtype

  • 但是,df2.str方法,例如df2["postal"].str.lower(),但df1没有。
  • 类似地,df1可以对其进行数学运算,例如df1 * 2

这与其他 SO 问题不同。他们询问列中是否有字符串(而不是整个列)。例如:

Pab*_*o C 5

您可以使用pandas.api.types.infer_dtype

>>> pd.api.types.infer_dtype(df2["postal"])
'string'
>>> pd.api.types.infer_dtype(df1["postal"])
'floating'

Run Code Online (Sandbox Code Playgroud)

来自文档:

有效推断传递的 val 或类似列表的值数组的类型。返回描述类型的字符串。