簡體   English   中英

Pandas 中的多個同名列

[英]Multiple columns with the same name in Pandas

我正在從 CSV 文件創建dataframe 我已經瀏覽了文檔、多個 SO 帖子、鏈接,因為我剛剛開始使用 Pandas 但沒有得到它。 CSV文件有多個列有相同的名字說a

那么在形成dataframe ,當我執行df['a']它會返回哪個值? 它不會返回所有值。

此外,只有一個值會有一個字符串 rest 是None 我怎樣才能得到那個專欄?

相關參數是mangle_dupe_cols

文檔

mangle_dupe_cols : boolean, default True Duplicate columns will be specified as 'X.0'...'X.N', rather than 'X'...'X'

默認情況下,您'a'所有'a'列都命名為'a.0'...'a.N' ,如上所述。

如果您使用mangle_dupe_cols=False ,則導入此csv會產生錯誤。

你可以得到你所有的列

df.filter(like='a')

示范

from StringIO import StringIO
import pandas as pd

txt = """a, a, a, b, c, d
1, 2, 3, 4, 5, 6
7, 8, 9, 10, 11, 12"""

df = pd.read_csv(StringIO(txt), skipinitialspace=True)
df

在此處輸入圖片說明

df.filter(like='a')

在此處輸入圖片說明

我有一個類似的問題,不是因為從 csv 讀取,而是我有多個同名的 df 列(在我的例子中是“id”)。 我通過獲取 df.columns 並使用列表重置列名來解決它。

In : df.columns
Out: 
Index(['success', 'created', 'id', 'errors', 'id'], dtype='object')

In : df.columns = ['success', 'created', 'id1', 'errors', 'id2']

In : df.columns
Out: 
Index(['success', 'created', 'id1', 'errors', 'id2'], dtype='object')

從這里開始,我可以調用“id1”或“id2”來獲取我想要的列。

這就是我通常對我的基因表達數據集所做的,因為相同基因的基因序列略有不同,所以相同的基因名稱可能會出現多次:

  1. 在我的數據框中創建一個重復列的列表(指的是出現多次的列名):
duplicated_columns_list = []
list_of_all_columns = list(df.columns)
for column in list_of_all_columns:
    if list_of_all_columns.count(column) > 1 and not column in duplicated_columns_list:
        duplicated_columns_list.append(column)
duplicated_columns_list
  1. 使用函數.index()幫助我找到在每次迭代中重復的第一個元素並給它下划線:
for column in duplicated_columns_list:
    list_of_all_columns[list_of_all_columns.index(column)] = column + '_1'
    list_of_all_columns[list_of_all_columns.index(column)] = column + '_2'

這個for循環幫助我強調所有重復的列,現在每列都有一個不同的名稱。

此特定代碼與恰好出現 2 次的列相關,但可以針對在數據框中出現甚至超過 2 次的列進行修改。

  1. 最后,使用下划線元素重命名列:

df.columns = list_of_all_columns

就是這樣,我希望它有幫助:)

與 JDenman6 類似(並與您的問題相關),我有兩個同名的 df 列(名為“id”)。 因此,調用

df['id']

返回 2 列。 您可以使用

df.iloc[:,ind]

其中ind對應於列的索引,具體取決於它們在 df 中的排序方式。 您可以使用以下方法找到索引:

indices = [i for i,x in enumerate(df.columns) if x == 'id']

用您要搜索的列的名稱替換“id”。

暫無
暫無

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

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