Python读取无列名含空列CSV:删除空列及列命名/访问问题
问题描述
我有一个80列、12500行的CSV文件,所有列都没有名称,还存在空列,数据示例如下:
8,1,,0,1993,146,,2,1,,,,,,,,,,2.1,0.65,0.15,0.65,19.1,,18.03,,,19.6,,,0.06,,,,,,19.1,19.6294717,19.36473585,0.06,,,,51.25,19.3,23.3,-0.04,-0.04,0.34,0.07,0.16,,,0.16,,,,,,,,,,,,,,,,,,15.3,7.8,11.55,58,100,79,15.4,8,11.7
我用data = pd.read_csv('CollectedData.csv')读取文件后,尝试用data = data.dropna()删除空列,结果发现这代码只会删行,不会删列。现在需要解决两个问题:怎么删除空列?怎么给特定列命名并访问这些列?
删除空列
dropna()默认是删除包含缺失值的行,要删除空列需要指定axis=1参数。如果只想删除完全为空值的列(大部分场景推荐用这个),再加上how='all':
# 删除所有全为空的列 data = data.dropna(axis=1, how='all') # 若是需要删除任何包含空值的列(慎用,会把所有带缺失值的列都删掉) # data = data.dropna(axis=1, how='any')
也可以通过筛选的方式直接保留非全空列:
data = data.loc[:, data.notna().any(axis=0)]
给特定列命名并访问
1. 读取文件时直接指定列名
如果提前知道要命名的列的位置,读文件时用names参数直接定义列名。比如给第0、3、4列分别命名为col_a、col_b、col_year,剩余列可以用空字符串占位适配80列的长度:
# 生成对应80列的列名列表 column_names = ['col_a', '', '', 'col_b', 'col_year'] + ['']*(80-5) data = pd.read_csv('CollectedData.csv', names=column_names)
2. 读取文件后修改特定列名
先获取当前列名列表,修改指定索引位置的列名,再重新赋值给DataFrame的列属性:
current_cols = list(data.columns) # 示例:把第5列(索引为5)命名为col_id,第18列命名为col_value current_cols[5] = 'col_id' current_cols[18] = 'col_value' data.columns = current_cols
3. 访问命名后的列
直接通过列名即可访问对应列的数据:
# 用方括号语法获取列 col_year_data = data['col_year'] # 列名不含特殊字符时,也可以用点语法 col_year_data = data.col_year
内容的提问来源于stack exchange,提问作者user19963011
相关产品推荐
相关产品推荐

