如何在Pandas中无需指定列名提取datetime64类型列为Series
如何无需指定列名,将DataFrame中datetime64类型列以Series形式返回?
问题场景
先创建示例DataFrame:
import pandas as pd # 创建日期范围 dates = pd.date_range('2015-01-25', periods=5, freq='W') # 创建包含日期列和数值列的DataFrame dataframe = pd.DataFrame({ 'Date': dates, 'Value': [10, 20, 30, 40, 50] })
当指定列名选取Date列时,会返回pandas.core.series.Series对象:
dataframe['Date'] = pd.to_datetime(dataframe['Date']) print(dataframe['Date'])
但通过筛选datetime64[ns]类型列时,得到的是pandas.core.frame.DataFrame对象:
date_cols = dataframe.loc[:, dataframe.dtypes == 'datetime64[ns]'] print(date_cols)
现在需要实现:无需指定列名,直接将筛选出的datetime64类型列以Series形式返回。
解决方案
1. 仅存在一个datetime64类型列时
这是最常见的场景,直接用squeeze()方法将单列DataFrame转为Series即可:
date_series = dataframe.loc[:, dataframe.dtypes == 'datetime64[ns]'].squeeze()
或者通过提取筛选出的列名来获取Series:
# 获取datetime类型列的列名 datetime_col_name = dataframe.dtypes[dataframe.dtypes == 'datetime64[ns]'].index[0] date_series = dataframe[datetime_col_name]
验证结果类型:
print(type(date_series)) # 输出:<class 'pandas.core.series.Series'>
2. 存在多个datetime64类型列时
如果DataFrame中有多个日期列,可以先获取所有datetime类型的列名,再按需转为Series:
# 获取所有datetime类型列的列名列表 datetime_col_names = dataframe.dtypes[dataframe.dtypes == 'datetime64[ns]'].index.tolist() # 遍历每个列名,转为Series for col_name in datetime_col_names: date_series = dataframe[col_name] # 在这里对每个Series进行后续处理
内容的提问来源于stack exchange,提问作者Shax Studio
相关产品推荐
相关产品推荐

