簡體   English   中英

從現有 dataframe 的某些列創建新的 pandas dataframe

[英]Creating new pandas dataframe from certain columns of existing dataframe

我已將 csv 文件讀入 pandas dataframe 並想對 dataframe 進行一些簡單的操作。我無法弄清楚如何根據原始 88140211179:688 中的選定列創建新的 dataframe。我的嘗試

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

我想用原始 dataframe 的 A 列和 D 列創建一個新的 dataframe。

它被稱為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 [row_indexer,col_indexer] = value

如果稍后修改new_dataset值,您會發現修改不會傳播回原始數據( dataset ),並且Pandas會發出警告。

正如EdChum指出的那樣,為刪除警告添加copy

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

您必須將列名列表傳遞給 select 列。 否則,它將被解釋為 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()

NB items是第一個位置參數,因此df.filter(['A', 'D'])也有效。

請注意filter()reindex()也會返回一個副本,因此您不必擔心稍后會收到SettingWithCopyWarning

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM