使用Pandas将列表转换为DataFrame时,如何处理首行异常的0及数据格式问题?
解决Pandas列表转DataFrame时数据未正确拆分列的问题
嘿,我看你遇到的问题是把列表转换成DataFrame时,数据没有按预期拆分成列,反而挤在了一列里,而且首行的表头也没被正确识别对吧?咱们来一步步搞定这个问题。
问题原因分析
你的输入数据结构有点特殊:第一个元素是一个类似CSV格式的字符串("DateTime","mm"),后面的元素才是包含两个值的子列表。直接用pd.DataFrame(list(data))的话,Pandas会把每个元素都当成单独的一行,自然就只有一列了,完全不符合你想要的两列结构。
解决方案
我们需要分两步处理:先提取并清洗表头,再处理数据行并转换成正确的格式,最后创建DataFrame。
完整代码示例
import pandas as pd # 你的原始输入数据 data = [ '"DateTime","mm"', ['"2016-10-14 00:00:00"', '1.1'], ['"2016-10-15 00:00:00"', '2.1'], ['"2016-10-16 00:00:00"', '8.4'], ['"2016-10-17 00:00:00"', '1.1'], ['"2016-10-18 00:00:00"', '3.1'], ['"2016-10-19 00:00:00"', '0'], # ... 其他剩余数据行 ] # 第一步:提取并清洗列名 # 拆分表头字符串,去掉HTML转义的引号 columns = [col.replace('"', '') for col in data[0].split(',')] # 第二步:处理数据行 # 去掉每个字段的引号,同时把mm列转为浮点型 processed_rows = [] for row in data[1:]: clean_dt = row[0].replace('"', '') clean_mm = float(row[1].replace('"', '')) processed_rows.append([clean_dt, clean_mm]) # 第三步:创建正确的DataFrame df = pd.DataFrame(processed_rows, columns=columns) print(df)
更简洁的写法(用列表推导式)
如果喜欢更紧凑的代码,也可以这样写:
import pandas as pd data = [ '"DateTime","mm"', ['"2016-10-14 00:00:00"', '1.1'], # ... 其他数据行 ] columns = [c.strip('"') for c in data[0].split(',')] df = pd.DataFrame( [[x.strip('"'), float(y.strip('"'))] for x, y in data[1:]], columns=columns ) print(df)
预期输出
运行上面的代码后,你会得到符合预期的两列DataFrame:
DateTime mm 0 2016-10-14 00:00:00 1.1 1 2016-10-15 00:00:00 2.1 2 2016-10-16 00:00:00 8.4 3 2016-10-17 00:00:00 1.1 ...
这样数据就正确拆分成了DateTime和mm两列,表头也正常显示,再也不会出现所有数据挤在一列的情况啦。
内容的提问来源于stack exchange,提问作者N K
相关产品推荐
相关产品推荐

