python 从现有 Dataframe 的某些列创建新的panda Dataframe

7xzttuei  于 2023-02-02  发布在  Python
关注(0)|答案(2)|浏览(212)

我已经将一个csv文件读入到一个panda Dataframe 中,并想对 Dataframe 做一些简单的操作。我不知道如何基于从原始 Dataframe 中选择的列创建一个新的 Dataframe 。我的尝试:

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

我想创建一个新的 Dataframe ,其中包含原始 Dataframe 中的A列和D列。

l7wslrjt

l7wslrjt1#

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

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

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

与以下内容相同:

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

如果只需要滤波输出,则将参数usecols添加到read_csv

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

编辑:
如果仅使用:

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

使用一些数据操作,显然可以得到:
试图在DataFrame的切片副本上设置值。
请尝试改用. loc [行索引器,列索引器]=值
如果以后修改new_dataset中的值,您会发现修改不会传播回原始数据(dataset),并且Pandas会发出警告。
按照EdChum的指示,添加copy以删除警告:

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

yr9zkbsy2#

必须传递列名列表以选择列。否则,它将被解释为MultiIndex;如果df.columns是多索引,则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

相关问题