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文件。以下是代码的详细解释:

  1. 导入必要的库:
import pandas as pd
import numpy as np

这里导入了pandasnumpy库,分别用于数据处理和数值计算。
2. 读取Pickle文件:

one = pd.read_pickle("jian_fen.pkl")
two = pd.read_pickle("jian_shu1.pkl")

这里读取了两个Pickle文件,并将它们分别赋值给变量onetwo
3. 初始化一个空列表用于存储处理后的数据:

data_list = []
  1. 遍历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"列。
  1. 处理每个主题(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列表中。
  1. 合并数据和主题信息:
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合并。
  • infotopic横向合并,并将结果添加到data_list列表中。
  1. 合并所有处理后的数据:
data = pd.concat(data_list)

data_list中的所有DataFrame合并成一个大的DataFrame。
9. 保存结果为Pickle文件:

pd.to_pickle(data, "jian_fen2.pkl")

将合并后的DataFrame保存为Pickle文件,以便后续使用。