2017-01-21 13 views
2

Я изучаю Python, и я пытаюсь понять, как метод apply() работает в DataFrams Pandas.Применить с условием на Dataframe Pandas elementwise

В качестве упражнения я хотел бы использовать код одной строки, чтобы применить метод str.upper() к элементам блока данных Pandas только в том случае, если эти элементы являются строками.

Я решил объединить условное выражение лямбда с применением, но проблема в том, что при применении вызовов в кадре данных Pandas, dataframe --if я хорошо понял - возвращает применяемую серию, которая затем передает ее функции. Интересно, как я мог бы получить уровень глубже и вызвать функцию на элементах кадра данных Pandas.

Это, как я делать то, что я намереваюсь, когда применяется() вызывает на колонке DataFrame (серии):

df= pd.DataFrame([[1, 'a'],['b',2]], columns = ['A', 'B']) 
df['A'].apply(lambda x: str.upper(x) if type(x) is str else x) 

Но как я мог бы сделать это на всей dataframe с одной строки кода ?

Я ищу решение, которое будет работать с столбцами, которые содержат как числа, так и строки, и оставит число неизменным.

+0

вы можете использовать 'df.applymap()', но это очень медленно - так что будьте осторожны – MaxU

+0

Еще одна вещь, чтобы отметить, в то время как вы учитесь: если вы проверяете, если что-то является строкой и преобразует ее в верхний регистр: 'lambda x: x.upper(), если isinstance (x, basestring) else x' –

+0

@MaxU: Вы хотите опубликовать ответ, показывающий, как applymap() будет использоваться для решения конкретная проблема с экзаменационной рамкой данных? – gk7

ответ

1

Ваш один вкладыш

df.applymap(lambda x: x.upper() if isinstance(x, str) else x) 

    A B 
0 1 A 
1 B 2 
+2

Если это до Python 3, OP должен использовать 'basestring', а не' str' в 'isinstance()' –

+1

@Vincenzzzochi, 'basestring' не будет работайте в Python 3, поэтому нужно использовать 'six':' import six; df.applymap (lambda x: x.upper(), если isinstance (x, six.string_types) else x) '- это должно работать как в Python 2.x, так и в Python 3.x – MaxU

+1

@MaxU Вы правы. Там нет разногласий. –