如何从Pandas DataFrame字典格式列提取Unix时间戳数值?
从Pandas DataFrame字典格式列提取Unix时间戳
直接用apply逐层提取
针对你提到的{'$date': {'$numberLong': 'xxxxxxxxxxxxxx'}}格式,直接通过apply遍历列中的每个字典,逐层取值并转为整数:
# 替换成你的目标列名 df['unix_timestamp'] = df['date_col'].apply(lambda x: int(x['$date']['$numberLong']))
如果存在空值或格式不规范的行,加个异常处理避免报错:
def get_timestamp(d): try: return int(d['$date']['$numberLong']) except (KeyError, TypeError): return None # 这里可以换成你需要的默认值 df['unix_timestamp'] = df['date_col'].apply(get_timestamp)
批量展开嵌套字典(适合多列场景)
如果有多个类似的嵌套字典列,用pd.json_normalize一次性展开更高效:
import pandas as pd # 展开目标列的嵌套结构 expanded_df = pd.json_normalize(df['date_col']) # 提取时间戳并转成整数,合并回原DataFrame df['unix_timestamp'] = expanded_df['$date.$numberLong'].astype(int)
读取JSON时提前处理
要是你的DataFrame是从JSON文件生成的,还可以在读取阶段就处理嵌套数据,省得后续麻烦:
import json import pandas as pd with open('你的数据文件.json', 'r') as f: raw_data = json.load(f) # 预处理每条数据里的时间戳 for entry in raw_data: if '$date' in entry and '$numberLong' in entry['$date']: entry['unix_timestamp'] = int(entry['$date']['$numberLong']) # 可选:删除原来的嵌套字典列 del entry['$date'] df = pd.DataFrame(raw_data)
内容的提问来源于stack exchange,提问作者Partridge000
相关产品推荐
相关产品推荐

