Python导入含表头的htwt.txt文件转换为DataFrame时触发ValueError的正确代码咨询
解决带表头的文本文件转DataFrame的ValueError问题
嘿,这个问题我太熟悉了——你碰到的是np.loadtxt()的一个常见坑:它默认会把所有行都当成数值数据来解析,但你的文件第一行是字符串表头Ht和Wt,自然没法转换成float类型,所以抛出了ValueError。
下面给你几个简单靠谱的解决方案,按推荐程度排序:
方案一:直接用Pandas读取(最推荐)
Pandas的read_csv()天生适合处理带表头的表格数据,尤其是空格分隔的文本,只需要指定分隔符为任意空格即可:
import pandas as pd import os os.chdir("/Users/James/Desktop/data/") # 使用\s+匹配任意数量的空格或制表符,自动识别第一行为表头 df1 = pd.read_csv("htwt.txt", sep="\s+")
这样生成的DataFrame会自动把Ht和Wt作为列名,数据列都是数值类型,一步到位,比先转Numpy再转DataFrame高效得多。
方案二:用Numpy跳过表头后转DataFrame
如果一定要保留先使用Numpy的流程,可以通过skiprows参数跳过第一行表头,之后手动给DataFrame指定列名:
import numpy as np import pandas as pd import os os.chdir("/Users/James/Desktop/data/") # skiprows=1 跳过第一行的表头 data1 = np.loadtxt("htwt.txt", skiprows=1) # 手动设置列名 df1 = pd.DataFrame(data1, columns=['Ht', 'Wt'])
方案三:用Numpy的genfromtxt处理混合类型
Numpy的genfromtxt支持处理包含表头的混合类型数据,不过相对来说不如Pandas直观:
import numpy as np import pandas as pd import os os.chdir("/Users/James/Desktop/data/") # names=True 表示将第一行作为列名,encoding指定编码避免乱码 data = np.genfromtxt("htwt.txt", names=True, dtype=None, encoding='utf-8') df1 = pd.DataFrame(data)
内容的提问来源于stack exchange,提问作者Kam Hung Wong
相关产品推荐
相关产品推荐

