Я изучаю 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 с одной строки кода ?
Я ищу решение, которое будет работать с столбцами, которые содержат как числа, так и строки, и оставит число неизменным.
вы можете использовать 'df.applymap()', но это очень медленно - так что будьте осторожны – MaxU
Еще одна вещь, чтобы отметить, в то время как вы учитесь: если вы проверяете, если что-то является строкой и преобразует ее в верхний регистр: 'lambda x: x.upper(), если isinstance (x, basestring) else x' –
@MaxU: Вы хотите опубликовать ответ, показывающий, как applymap() будет использоваться для решения конкретная проблема с экзаменационной рамкой данных? – gk7