我有一个超过 1GB 的大型文本文件(chat.txt),其格式如下:
john|12-02-1999|hello#,there#,how#,are#,you#,tom$
tom|12-02-1999|hey#,john$,hows#, it#, goin#
mary|12-03-1999|hello#,boys#,fancy#,meetin#,ya'll#,here#
...
...
john|12-02-2000|well#,its#,been#,nice#,catching#,up#,with#,you#,and#, mary$
mary|12-03-2000|catch#,you#,on#,the#,flipside#,tom$,and#,john$
我想处理此文本并分别总结每个用户的某些关键字的字数(例如 500 个字 - 你好,很好,喜欢......晚餐,不)。此过程还涉及从每个单词中删除所有尾随特殊字符
输出看起来像
user hello nice like ..... dinner No
Tom 10000 500 300 ..... 6000 0
John 6000 1200 200 ..... 3000 5
Mary 23 9000 10000 ..... 100 9000
这是我当前的 pythonic 解决方案:
chat_data = pd.read_csv("chat.txt", sep="|", names =["user","date","words"])
user_lst = chat_data.user.unique()
user_grouped_data= pd.DataFrame(columns=["user","words"])
user_grouped_data['user']=user_lst
for i,row in user_grouped_data.iterrows():
id = row["user"]
temp = chat_data[chat_data["user"]==id]
user_grouped_data.loc[i,"words"] = ",".join(temp["words"].tolist())
result = pd.DataFrame(columns=[ "user", "hello", "nice", "like","...500 other keywords...", "dinner", "no"])
result["user"]= user_lst
for i, row in result.iterrows():
id = row["user"]
temp = user_grouped_data[user_grouped_data["user"]==id]
words = temp.values.tolist()[0][1]
word_lst = words.split(",")
word_lst = [item[0:-1] for item in word_lst]
t_dict = Counter(word_lst)
keys = t_dict.keys()
for word in keys:
result.at[i,word]= t_dict.get(word)
result.to_csv("user_word_counts.csv")
这对于小数据来说效果很好,但是当我的 chat_data 超过 1GB 时,这个解决方案变得非常慢并且无法使用。
下面是否有任何我可以改进的部分可以帮助我更快地处理数据?
按用户对文本数据进行分组
通过删除尾随特殊字符来清理每行中的文本数据
计算单词数并将单词数分配给右列
千万里不及你
九州编程
江户川乱折腾
相关分类