关键字数据帧的Python列解析器
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了关键字数据帧的Python列解析器相关的知识,希望对你有一定的参考价值。
以下链接是我正在尝试解析的数据源示例。
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']
非常感谢任何帮助或指导!
答案
我希望有人能给你一个更优雅的方法。
- 将每个单词串拆分为一个名为
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
以上是关于关键字数据帧的Python列解析器的主要内容,如果未能解决你的问题,请参考以下文章
解析 Pyspark 数据帧的 json 列,其中一个键值为 None