[英]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”來獲取我想要的列。
這就是我通常對我的基因表達數據集所做的,因為相同基因的基因序列略有不同,所以相同的基因名稱可能會出現多次:
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
.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 次的列進行修改。
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.