我想在我的数据框中切两列。
这是我执行此操作的代码:
import pandas as pd
df = pd.read_csv('source.txt',header=0)
cidf = df.loc[:,['vocab','sumCI']]
这是一个数据示例:
ID vocab sumCI sumnextCI new_diff
450 statu 3.0 0.0 3.0
391 provid 4.0 1.0 3.0
382 prescript 3.0 0.0 3.0
300 lymphoma 2.0 0.0 2.0
405 renew 2.0 0.0 2.0
首先,我收到此错误:
KeyError: “None of [['', '']] are in the [columns]”'
我尝试过的:
- 我尝试在读取文件时放一个带有
index 0
的header
, - 我尝试使用以下代码重命名列:
df.rename(columns=df.iloc[0], inplace=True)
- 我也试过这个:
df.columns = df.iloc[1] df = df.reindex(df.index.drop(0))
- 还尝试在此链接中发表评论
以上方法均未解决问题。
根据您发布的印刷品,您似乎有空格作为分隔符。pd.read_csv
将使用,
作为默认分隔符读取,因此您必须明确声明它:
pd.read_csv('source.txt',header=0, delim_whitespace=True)
也许您的列名称周围有空格,请仔细检查您的 csv 文件
如果收到此(或类似(错误,请检查数据帧是否包含这些列。以下内容应返回True
以便索引工作。
cols = ['vocab', 'sumCI']
set(df.columns).issuperset(cols)
如果上述返回False
,则需要处理列。
一个常见的罪魁祸首是前导/尾随空格,所以请尝试
df.columns = df.columns.str.strip()
其他常见问题可能是合法列名中的单词之间的双下划线、双空格或全角破折号 (—
(。然后,您可以尝试正则表达式删除多余的空格和下划线,并在列名等中用破折号替换em破折号。
df.columns = df.columns.to_series().replace({r's+': ' ', r'_+': '_', r'—': '-'}, regex=True)
只需编写代码即可创建新的CSV文件并使用新文件
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
pd.read_csv('source.txt',header=0, delim_whitespace=True)
headers = ['ID','vocab','sumCI','sumnextCI','new_diff']
df.columns = headers
df.to_csv('newsource.txt')
您可以尝试这样做:
pd.read_csv('source.txt',header=0, delim_whitespace=True)
如果数据中有任何空格,则会收到错误,因此包含delim_whitespace
以删除它们,以防它们在数据中。