【问题标题】:Issue with concatenating and replace in Pandas dataframePandas 数据框中的连接和替换问题
【发布时间】:2017-08-21 02:35:40
【问题描述】:

我遇到了一些事情,如果我以一种方式解决它,它就会破坏其他东西。

我有一组按国家/地区列出文件状态的数据。我想要做的是,对于 Country 列中的每个国家,按 VisitStatus 列中的每个状态打印所有丢失的文件。因此,对于 country=France 的所有行,然后对于每次“完成”的访问,列出丢失文件的数量。

我将两个数据帧连接成一个组合集,以使用并提供最终输出。我正在将 df_s 和 df_ins 合并到 df_combined 中。

当我为 Country 和 VisitStatus 列获取一组唯一值进行循环,然后尝试将每个国家/地区的结果写入 Excel 文件工作簿时,数据中的怪癖会引发“重复工作表名称”错误。在其中一个源数据框中,VisitStatus 列中的状态为“Do Not Review”,但在另一个源数据框中,它被命名为“Do not review”,后两个单词为小写。当它们连接起来时,这会踢出“不审查”和“不审查”的独特价值。然后,当 xslx 编写器尝试为第二个工作簿创建工作簿时,它会根据现有工作簿进行检查,忽略大小写,找到第一个工作簿,确定它们是相同的,因为它忽略大小写,并踢出错误,指出“不审查的工作表已经存在。

如果我运行 replace() 并将 VisitStatus 列中的所有“不审查”值更改为“不审查”,以便它们都匹配并且在我调用 unique() 时不给出两个结果,它中断并在 VisitStatus 上给我一个 KeyError。

到目前为止,我已经阅读了一个又一个线程,但无法解决这个问题。我刚刚尝试在源数据帧上运行 replace(),然后它抛出一个错误,说“状态”是一个浮点数,不能像字符串一样处理。

我很茫然。提前致谢!

#     COMBO
# Merge the screening and in study datasets
df_combined = pd.concat([df_s,df_ins], axis=0, ignore_index=True)
df_combined = df_combined.query('VisitStatus != "Hand Off  Information"')
print(df_combined.columns.values)

print("---------------------------------------------------------------------------------")
# Display and save out country and missing file status
statuses = df_combined['VisitStatus'].unique()
countries = df_combined['Country'].unique()
for status in statuses:
    print("X" + status + "X")
    print('\n')
print (statuses)
for country in countries:
    for status in statuses:
        print('\n')
        print("---> Missing Files for " + country + " all visits with status of: " + str(status))
        df_cmb = df_combined[(df_combined.Country==country) & (df_combined.VisitStatus==status)]
        print('\n')
        numRows=df_cmb.shape[0]
        if numRows > 0:
            print("----> Number of visits in " + str(status) + " subset: " + str(numRows))
            print("DRF Forms Missing: " + str(df_cmb['DRF-Form-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['DRF-Form-Uploaded'].sum()) + " collected")
            print("CSSRS Forms Missing: " + str(df_cmb['CSSRS-Form-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['CSSRS-Form-Uploaded'].sum()) + " collected")
            print("CDR Forms Missing: " + str(df_cmb['CDR-Form-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['CDR-Form-Uploaded'].sum()) + " collected")
            print("CDR Audio Missing: " + str(df_cmb['CDR-Audio-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['CDR-Audio-Uploaded'].sum()) + " collected")
            print("MMSE Forms Missing: " + str(df_cmb['MMSE-Form-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['MMSE-Form-Uploaded'].sum()) + " collected")
            print("MMSE Audio Missing: " + str(df_cmb['MMSE-Audio-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['MMSE-Audio-Uploaded'].sum()) + " collected")
            print("RBANS Forms Missing: " + str(df_cmb['RBANS-Form-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['RBANS-Form-Uploaded'].sum()) + " collected")
            print("RBANS Audio Missing: " + str(df_cmb['RBANS-Audio-Uploaded'].sum()) + " vs. " + str(numRows - df_cmb['RBANS-Audio-Uploaded'].sum()) + " collected")
            print("--------------------------------------")
            print('\n')
        else:
            print("No " + status + " files/visits for " + country)
        if country =="United States":
            country="USA"
        # something is borked in the next line - somehow there are two "Do Not Review" status types in the combined file, triggers an "already in use" for sheetname
        df_cmb.to_excel(combo_writer, header=True, index=False, sheet_name=str(country)[:3] + "-by-" + str(status))

【问题讨论】:

  • 如果您可以只显示您的输入和预期输出会更简单。

标签: python pandas replace unique concat


【解决方案1】:

天啊。我正在回答我自己的问题。

所以我又修改了一些,但没有其他任何意义,所以我开始怀疑我是否正确地为 replace() 输入了参数,并且我把它们倒过来了。我认为“不审查”需要更改为“不审查”,但反过来……我错误地认为需要修改哪些源文件数据。一旦我翻转它们,它就起作用了。

【讨论】:

  • 如果是错字,请考虑删除此问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-23
  • 1970-01-01
  • 2013-02-04
  • 2021-07-25
相关资源
最近更新 更多