所以,我有一個列名稱的數據框,我想找到包含某個字符串但沒有完全匹配的列。我正在尋找名爲'spike'
的列名,如'spike-2'
,'hey spike'
,'spiked-in'
('spike'
部分始終是連續的)。熊貓:找到其名稱中包含特定字符串的列
我希望列名作爲字符串或變量返回,所以我以後正常訪問列df['name']
或df[name]
。我試圖找到辦法做到這一點,無濟於事。有小費嗎?
所以,我有一個列名稱的數據框,我想找到包含某個字符串但沒有完全匹配的列。我正在尋找名爲'spike'
的列名,如'spike-2'
,'hey spike'
,'spiked-in'
('spike'
部分始終是連續的)。熊貓:找到其名稱中包含特定字符串的列
我希望列名作爲字符串或變量返回,所以我以後正常訪問列df['name']
或df[name]
。我試圖找到辦法做到這一點,無濟於事。有小費嗎?
只是遍歷DataFrame.columns
,現在這是你最終會與匹配列名的列表的示例:
import pandas as pd
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)
spike_cols = [col for col in df.columns if 'spike' in col]
print(list(df.columns))
print(spike_cols)
輸出:
['hey spke', 'no', 'spike-2', 'spiked-in']
['spike-2', 'spiked-in']
說明:
df.columns
返回列名稱列表[col for col in df.columns if 'spike' in col]
在列表df.columns
上重複變量col
,並將其添加到結果列表中,如果col
包含'spike'
。這個語法是list comprehension。如果你只想要得到的數據相匹配,你可以做到這一點,該欄目設置:
df2 = df.filter(regex='spike')
print(df2)
輸出:
spike-2 spiked-in
0 1 7
1 2 8
2 3 9
This answer使用DataFrame.filter方法來做到這一點無列表理解:
import pandas as pd
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6]}
df = pd.DataFrame(data)
print(df.filter(like='spike').columns)
會輸出'秒殺-2'。您還可以使用正則表達式,因爲有些人在上面留言建議:
print(df.filter(regex='spike|spke').columns)
會輸出兩列:[「秒殺-2」,「嗨spke」]
您還可以使用df.columns [ df.columns.str.contains(PAT = '秒殺')]
data = {'spike-2': [1,2,3], 'hey spke': [4,5,6], 'spiked-in': [7,8,9], 'no': [10,11,12]}
df = pd.DataFrame(data)
colNames = df.columns[df.columns.str.contains(pat = 'spike')]
print(colNames)
這將輸出的列名: '秒殺-2',u'spiked式
這是真棒!然而,我並不十分清楚它是如何工作的,對於Python和Pandas來說,它們都是新的。你能解釋一下嗎? – Sajber
這就是''DataFrame.filter''確實是FYI(如果你願意,你可以提供一個正則表達式) – Jeff
感謝您的解釋! – Sajber