使用Pandas处理CSV:将X/Y列字符串数组转数值并拆分行
解决步骤
1. 把字符串格式的数组转成数值列表
X、Y列目前是带[]的字符串,得先把它们解析成真正的数值数组。用ast.literal_eval是最稳妥的方式,不会有执行恶意代码的风险:
import ast import pandas as pd # 先读入原数据 df = pd.read_csv("horrible.csv") # 解析X、Y列的字符串为数值列表 df['X'] = df['X'].apply(ast.literal_eval) df['Y'] = df['Y'].apply(ast.literal_eval)
2. 将数组拆分成多行
用pandas的explode方法,一次性把X、Y列的列表元素拆成单独行,其他列的数值会自动对应重复:
# 拆分X、Y列,生成新的DataFrame df_final = df.explode(['X', 'Y'], ignore_index=True) # 可选:把X、Y转成明确的数值类型(避免仍为object) df_final['X'] = df_final['X'].astype(int) df_final['Y'] = df_final['Y'].astype(int)
最终效果
运行完上面的代码后,df_final就是你要的格式:
time X Y status1 status2 0 1659312306212 -53 -1512 -65 18.441406 1 1659312306212 -70 -1656 -65 18.441406 2 1659312421965 25 -1532 -71 18.433594 3 1659312421965 -34 -1520 -71 18.433594
此时X、Y列的类型也会变成int,符合数值类型要求。
内容的提问来源于stack exchange,提问作者Oblomov
相关产品推荐
相关产品推荐

