import pandas as pd
import numpy as np
one = pd.read_pickle("jian_fen.pkl")
two = pd.read_pickle("jian_shu1.pkl")
# print(one)
data_list=[]
for name, data in zip(one["name"].values, two):
info = np.array(data[0].split("\n")).reshape([-1, 2])
topic = [i.split("\n")[:2] + i.split("\n")[-1].split() for i in data[1]]
info = pd.DataFrame(data=info[:, 0].reshape([1, -1]), columns=info[:, 1])
info.loc[:, "name"] = name
topic_list = []
for one_topic in topic:
if "付费" in one_topic:
if len(one_topic) == 9:
one_topic = one_topic[:2] + [1] + one_topic[2:3] + one_topic[-5:-2] + [0]
else:
one_topic = one_topic[:2] + [1] + one_topic[2:3] + one_topic[-6:-2]
else:
if len(one_topic) == 8:
one_topic = one_topic[:2] + [0] + one_topic[-6:-2] + [0]
else:
one_topic = one_topic[:2] + [0] + one_topic[-7:-2]
try:
one_topic = pd.DataFrame(columns=["标题", "文本", "付费", "钻", "浏览", "评论", "喜欢", "赏"],
data=np.array(one_topic).reshape([1, -1]))
topic_list.append(one_topic)
except:
print("time")
try:
topic = pd.concat(topic_list)
info=pd.concat([info]*len(topic))
one_data=pd.concat([info,topic],axis=1)
data_list.append(one_data)
except:
print("kong")
data=pd.concat(data_list)
pd.to_pickle(data,"jian_fen2.pkl")
这段代码的主要目的是处理和合并两个Pandas DataFrame对象,并将结果保存为Pickle文件。以下是代码的详细解释:
- 导入必要的库:
import pandas as pd
import numpy as np
这里导入了pandas
和numpy
库,分别用于数据处理和数值计算。
2. 读取Pickle文件:
one = pd.read_pickle("jian_fen.pkl")
two = pd.read_pickle("jian_shu1.pkl")
这里读取了两个Pickle文件,并将它们分别赋值给变量one
和two
。
3. 初始化一个空列表用于存储处理后的数据:
data_list = []
- 遍历
one
中的"name"列和two
中的数据:
for name, data in zip(one["name"].values, two):
这里使用zip
函数将one
中的"name"列的值和two
中的数据一一对应起来进行遍历。
5. 处理data
中的信息:
info = np.array(data[0].split("\n")).reshape([-1, 2])
topic = [i.split("\n")[:2] + i.split("\n")[-1].split() for i in data[1]]
info = pd.DataFrame(data=info[:, 0].reshape([1, -1]), columns=info[:, 1])
info.loc[:, "name"] = name
- 将
data[0]
按行分割,并转换为NumPy数组,然后重塑为两列的格式,第一列为值,第二列为列名。 - 将
data[1]
中的每个元素按行分割,提取前两行和最后一行的数据。 - 将
info
转换为Pandas DataFrame,并添加"name"列。
- 处理每个主题(topic):
topic_list = []
for one_topic in topic:
# 省略了具体的处理逻辑,见下文
try:
one_topic = pd.DataFrame(columns=["标题", "文本", "付费", "钻", "浏览", "评论", "喜欢", "赏"],
data=np.array(one_topic).reshape([1, -1]))
topic_list.append(one_topic)
except:
print("time")
- 遍历每个主题,根据是否包含"付费"字段进行不同的处理。
- 将处理后的主题转换为Pandas DataFrame,并添加到
topic_list
列表中。
- 合并数据和主题信息:
try:
topic = pd.concat(topic_list)
info = pd.concat([info] * len(topic))
one_data = pd.concat([info, topic], axis=1)
data_list.append(one_data)
except:
print("kong")
- 使用
pd.concat
合并topic_list
中的所有DataFrame。 - 将
info
DataFrame复制topic
的长度次,以便与topic
合并。 - 将
info
和topic
横向合并,并将结果添加到data_list
列表中。
- 合并所有处理后的数据:
data = pd.concat(data_list)
将data_list
中的所有DataFrame合并成一个大的DataFrame。
9. 保存结果为Pickle文件:
pd.to_pickle(data, "jian_fen2.pkl")
将合并后的DataFrame保存为Pickle文件,以便后续使用。