gpt4 book ai didi

python - 使用 xlsxwriter 打印 pandas 输出时,某些单元格为空

转载 作者:行者123 更新时间:2023-12-04 20:48:22 26 4
gpt4 key购买 nike

我有两张多行多列的 excel 工作表。我的任务是比较两个 excel 并只打印匹配的值。输出必须打印到新的 excel 中。我的想法是为此使用 pandas 和 xlsxwriter 引擎。
伪代码:

  • 读取 Excel 1 --> 数据框 1
  • 读取 Excel 2 --> 数据框 2
  • 过滤 Excel 2,使其仅包含带有特定文本“Service_”的条目 --> Dataframe 3
  • 比较 Excel 1 与过滤后的 Excel 2(数据框 1 与数据框 3)
  • 仅打印两个 excel 中的匹配元素 (Dataframe 4)
  • 将输出存储在带有两张工作表(数据框 3 和数据框 4)的新 Excel 中

  • 我遇到的问题是 Dataframe 3 打印正确,但 Dataframe 4 有一些缺失值
    数据框 1
      ColumnAlpha     
    0 Service_1
    1 Service_2
    2 Service_3
    3 Service_4
    4 Service_5
    5 Service_6
    数据框 2
       ColumnA    ColumnB  ColumnC 
    0 Service_1 100 Text1
    1 Service_2 110 Text2
    2 Sample1 120 Text3
    3 Sample2 130 Text4
    4 Service_6 140 Text5
    5 Service_7 150 Text6
    代码:
    #Reading Excel 1 
    data1 = pd.read_excel(r'C:\Users\XXXX\Excel1.xlsx')
    df1 = pd.DataFrame(data1, columns= ['ColumnAlpha'])

    #Reading Excel 2
    data2 = pd.read_excel(r'C:\Users\XXXX\Excel2.xlsx')
    df2 = pd.DataFrame(data2, columns= ['ColumnA','ColumnB','ColumnC'])

    # Filtering ColumnA containing the text Service_ and sorting
    filter_df2 = df2.loc[df2['ColumnA'].str.contains("Service_", case = False)]
    clean_df2 = filter_df2.groupby("ColumnA").first().reset_index()
    clean_df2.sort_values(by='ColumnB', inplace=True, ascending=[False])

    #Comparing ColumnA with ColumnAlpha to filter only matching texts
    MatchedData = pd.DataFrame(columns=['ColumnA', 'ColumnB','ColumnC'])
    for i in df1.ColumnAlpha:
    match_df = clean_df2[clean_df2.ColumnA.str.contains(i)]
    MatchedData = MatchedData.append(match_df, ignore_index=True)

    # Class 2 Services Interfaces created in the last one week
    MatchedData["ThirdColumn"] = clean_df2["ColumnC"]

    OutputData = pd.DataFrame(MatchedData, columns= ['FirstColumn','SecondColumn','ThirdColumn'])
    OutputData.sort_values(by='SecondColumn', inplace=True)

    # Printing Output in Excel
    with pd.ExcelWriter(r'C:\Users\XXXX\Output.xlsx', engine='xlsxwriter') as writer: # pylint: disable=abstract-class-instantiated
    # Writing Sheet 1
    clean_df2.to_excel(writer, sheet_name="All entries", index=False)

    #Writing Sheet 2
    OutputData.to_excel(writer, sheet_name="Filtered entries", index=False)
    预期数据帧 3( 输出中的工作表 1)
        ColumnA   ColumnB  ColumnC 
    0 Service_7 150 Text6
    1 Service_6 140 Text5
    2 Service_2 110 Text2
    3 Service_1 100 Text1
    预期数据帧 4( 输出中预期的工作表 2 )
       FirstColumn  SecondColumn   ThirdColumn 
    0 Service_6 140 Text5
    1 Service_2 110 Text2
    2 Service_1 100 Text1
    实际数据框 4( 输出中的实际工作表 2,空单元格 C2 )
       FirstColumn  SecondColumn   ThirdColumn 
    0 Service_6 140 Text5
    1 Service_2 110 Text2
    2 Service_1 100
    这里出了什么问题?我正在努力寻找为什么在 Excel 的第一张表中打印相同的值时会省略一些随机值。
    答案或建议将不胜感激。非常感谢。
    P.S 我试图尽可能简化问题、代码和数据框。如果它看起来仍然很复杂,我提前道歉。

    最佳答案

    在我看来,这个问题与 MatchedData 和 OutputData 中的不同列名有关。
    我尝试将输出数据初始化为

    OutputData = pd.DataFrame(MatchedData, columns=['ColumnA', 'ColumnB', 'ColumnC'])And got the expected result.


    附言。
    如果 pandas 太复杂,那么对于基本任务,您可以使用纯 xlsxwriter 库(没有 Pandas 数据帧),并使用“dict”、“set”等基础 Python 语言控制数据。

    关于python - 使用 xlsxwriter 打印 pandas 输出时,某些单元格为空,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72632868/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com