Как будто вы пытаетесь получить доступ к объекту, который является null
. Рассмотрим ниже пример:
TypeA objA;
. В это время вы только что объявили этот объект, но не инициализировали или не инициализировали. И всякий раз, когда вы пытаетесь получить доступ к каким-либо свойствам или методам в нем, он будет генерировать NullPointerException
, что имеет смысл.
См. Также этот пример:
String a = null;
System.out.println(a.toString()); // NullPointerException will be thrown
Просто перейдите по 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'
. Этот синтаксис является пониманием списка . Если вы хотите, чтобы результирующий набор данных с соответствующими столбцами, вы можете сделать это:
df2 = df.filter(regex='spike')
print(df2)
Выход:
spike-2 spiked-in
0 1 7
1 2 8
2 3 9
Этот ответ использует метод 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)
Будет выводить только «spike-2». Вы также можете использовать регулярное выражение, как некоторые люди предложили в комментариях выше:
print(df.filter(regex='spike|spke').columns)
Выведет обе колонки: ['spike-2', 'hey spke']
Вы также можете использовать df.columns[df.columns.str.contains(pat = 'spike')]
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)
. Это приведет к отображению имен столбцов: 'spike-2', u'spiked-in'
Подробнее о pandas.Series.str.contains .
Вы также можете использовать этот код:
spike_cols =[x for x in df.columns[df.columns.str.contains('spike')]]
DataFrame.filter
делает FYI (и вы можете предоставить регулярное выражение, если хотите) – Jeff 22 January 2014 в 16:37df[df.columns.drop(spike_cols)]
, там вы получитеDataFrame
без столбцов в спискеspike_cols
, которые вы можете получить, используя ваше нежелательное регулярное выражение. – Alvaro Fuentes 31 March 2016 в 11:54