#python #pandas #function #loops #text
#python #панды #функция #циклы #текст
Вопрос:
Мне нужно применить функцию wordcounter к нескольким столбцам с текстом. Мне нужно, чтобы это выглядело так:
Код, который я написал
written = data.loc[:, 'text1':'text3']
written = written.fillna('none')
def wordcounter (text):
count = text.str.split().str.len()
return count
for col in written.columns:
written[col '_ct'] = written.apply(wordcounter, axis=1, args=(col,))
Но я получаю ошибку TypeError: wordcounter() принимает 1 позиционный аргумент, но было задано 2
Кто-нибудь знает, что я должен делать? Спасибо!
Ответ №1:
Я думаю, вы можете переработать функцию apply для работы со столбцом не как аргумент, а как фильтр фрейма данных:
import pandas as pd
def wordcounter(text):
return len(text.split())
data = pd.DataFrame.from_dict(
{
'text1': ['test words', 'more words'],
'text2': ['words words', 'word'],
'text3': ['words', 'word word'],
}
)
written = data.loc[:, 'text1':'text3']
written = written.fillna('none')
for col in written.columns:
written[col '_ct'] = written[col].apply(wordcounter)
print(written)
Вывод
text1 text2 text3 text1_ct text2_ct text3_ct
0 test words words words words 2 2 1
1 more words word word word 2 1 2
Ответ №2:
Вы можете apply
использовать свою функцию по столбцам, а не по строкам, поскольку .str.split().str.len()
это уже «векторизованные» операции.
Затем вы можете объединить фреймы данных (ваш оригинал text
, а также counts
вместе в конечный фрейм данных со всей информацией.
def word_counter(series):
return series.str.split().str.len()
counts_df = (df.apply(word_counter) # apply our function column-wise
.add_suffix("_count")) # add a suffix of "_count" to the column names
final_df = df.join(counts_df) # combine the original dataframe with the counts
print(final_df)
text1 text2 text3 text1_count text2_count text3_count
0 test words words words words 2 2 1
1 more words word word word 2 1 2