从现有数据框中选取特定列创建新的 pandas 数据框

29
我已经将csv文件读入到pandas数据框中,并希望对数据框进行一些简单的操作。我无法弄清如何基于原始数据框中选择的列创建一个新的数据框。我的尝试:
names = ['A','B','C','D']
dataset = pandas.read_csv('file.csv', names=names)
new_dataset = dataset['A','D']

我想从原始数据框中创建一个只包括列 A 和 D 的新数据框。


6
将感兴趣的列名列表传递给子选择函数以进行数据筛选: new_dataset = dataset[['A','D']]。请注意,如果您打算在副本上进行操作,则需要调用 copy() 函数:new_dataset = dataset[['A','D']].copy() - EdChum
2个回答

45

它被称为subset - 在[]中传递列的列表:

dataset = pandas.read_csv('file.csv', names=names)

new_dataset = dataset[['A','D']]

同义于:

new_dataset = dataset.loc[:, ['A','D']]

如果只需要过滤输出,可以向read_csv添加usecols参数:

new_dataset = pandas.read_csv('file.csv', names=names, usecols=['A','D'])

编辑:

如仅使用:

new_dataset = dataset[['A','D']]

做一些数据操作后,显然会得到以下结果:

正在尝试在 DataFrame 的切片副本上设置值。
请尝试使用 .loc[row_indexer,col_indexer] = value。

如果您稍后修改 new_dataset 中的值,则会发现这些修改不会传播回原始数据(dataset),并且 Pandas 会发出警告。

EdChum 所指出的,添加 copy 可以去除此警告:

new_dataset = dataset[['A','D']].copy()

0

你必须传递一个列名列表来选择列。否则,它将被解释为MultiIndex;如果df.columns是MultiIndex,则df['A','D']将起作用。

最明显的方法是df.loc[:, ['A', 'B']],但还有其他方法(请注意,它们都采用列表):

df1 = df.filter(items=['A', 'D'])

df1 = df.reindex(columns=['A', 'D'])

df1 = df.get(['A', 'D']).copy()

注意,items 是第一个位置参数,因此 df.filter(['A', 'D']) 同样有效。

请注意,filter()reindex() 也会返回副本,因此您不必担心以后会出现SettingWithCopyWarning


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接