关键字数据帧的Python列解析器

问题描述 投票:0回答:1

以下链接是我正在尝试解析的数据源示例。

http://www.mediafire.com/file/wfri4idoxszqixs/sampleWordData.xlsx

我有一个包含有价值词的专栏。我想解析行的每个单词并将amount列附加到它们。例如:

原始数据帧 单词(Col 1),金额(Col 2) 单词= ['Google','Google很棒','你好谷歌'] 金额= [5,10,5]

新数据帧 Word1(Col 1),Word2(Col 2),Word3(Col 3),金额(Col 4) Word1 = ['Google','Google','嗨'] Word2 = ['','是','Google'] Word3 = ['','awesome',''] 金额= [5,10,5]

最终数据帧 Word = ['Google','is','awesome','嗨'] 金额= [15,10,10,5]

尝试了尽可能好的解释,因为努力让降价与列格式相得益彰。我在xlsx中展示了我如何尝试转换数据的每一步。

我对以下代码的尝试:

import pandas as pd

#load the dataset
df = pd.read_csv('myfile.csv')
df.columns = ('words', 'amount')
df.head()

#toget rid of nulls
df.dropna(subset=['words', inplace=True)

#shows me how many columns are needed in total to encompass the longest line
print(df.words.str.split(expand=True).head() 

#attempt to split out the first word from the bunch of words per row
df2 = pd.DataFrame(df.words.str.split(' ', 1).tolist(),
                                  columns = ['word1', 'word2']

非常感谢任何帮助或指导!

python excel pandas parsing keyword
1个回答
0
投票

我希望有人能给你一个更优雅的方法。

  • 将每个单词串拆分为一个名为words的新列中的列表。
  • 将这些列表乘以Amount列,然后使用Counter请求它们的计数。
  • 使用外部函数aggregator在记录中聚合这些计数。
  • 最后使用聚合数据构建新的Dataframe。

import pandas as pd
from collections import Counter, defaultdict

def aggregator(counter):
    for k in counter.keys():
        result[k]+=counter[k]

df = pd.read_excel('sampleWordData.xlsx', header=0)
df['words'] = df['Word'].str.split()
df['counts'] = (df['words']*df['Amount']).apply(Counter)
result = defaultdict(int)
df.counts.apply(aggregator)
new_df = pd.DataFrame({'words': list(result.keys()), 'counts': list(result.values())})
print (new_df)

印刷结果:

   counts    words
0      20   Google
1      10       is
2      10  awesome
3       5       Hi
© www.soinside.com 2019 - 2024. All rights reserved.