当前位置: 首页 > 知识库问答 >
问题:

使用空值填充新数据帧

蓬意致
2023-03-14

我正在尝试合并两个数据帧:

  • 第一个数据帧,控件,用INTEGERS/STRINGS
  • 填充
  • 左边的数据框一起被整数/列表填充。

当我使用pandasmerge()函数时,新的数据框将用NaN填充右侧的数据框,而不是列表

final_dataset = pd.merge(control, together, on="zip_code", how="left")

我期望使用两个原始数据帧中的值创建一个新的合并数据帧。相反,在新的数据框中,“control”数据框中的所有值都是正确的,但“together”数据框中的所有列表都是正确的

以下是一些样本数据:

control                                       together
-------------------------------              -------------------------------
payment             zip_code                   age                  zip_code
   Rent                 94053                    [25, 64, 24]         12583
   Mortgage             47283                    [78. 39, 35]         47283
   Rent                 25769                    [82, 33, 19]         25769

以下是最终数据集的外观:

final_dataset
-----------------------------------------------------------
zip_code             payment                 age                  
47283                  Mortgage               NaN                 
25769                  Rent                   NaN                                

共有2个答案

焦兴为
2023-03-14

如果每个数据帧的邮政编码列具有不同的类型,则可能会发生这种情况,其中一个是int64,另一个是object,例如:

 a = pd.DataFrame([
    {"colA": 1, "key": "1"},
    {"colA": 2, "key": "2"},
    {"colA": 3, "key": "3"}
])

b = pd.DataFrame([
    {"colB": [25, 64, 24], "key": 1},
    {"colB": [25, 64, 24], "key": 2},
    {"colB": [25, 64, 24], "key": 4}
])

如果您合并这两个数据帧,您将得到

res = pd.merge(a, b, on="key", how='left')



   colA key colB
0   1   1   NaN
1   2   2   NaN
2   3   3   NaN

因此,您需要确保两个数据帧中的邮政编码具有相同的类型。

彭鸿文
2023-03-14

我认为你在这里有一些事情要做。当你说左数据帧时,我想你的意思是它应该是左连接右?"你的意思是"一起"在样本的左边?"

我认为可以安全地假设“together”中的邮政编码是字符串而不是int。您得到的是NaN,因为它们在2个数据帧中不匹配。示例47283不等于“47283”。

此外,如果它是一个左连接,你想要一起在左边,你应该有1个NaN付款,因为如果它们是相同的数据类型,你只有2zip_codes匹配。

如果您想控制左侧,我建议您这样做(我想您是这样做的):

control = pd.DataFrame({
    'payment':['Rent','Mortgage','Rent'],
    'zip_code':[94053,47283,25769]
})
together = pd.DataFrame({
    'age':[[25,64,24],[78, 39,35],[82,33,19]],
    'zip_code':[12583,47283,25769]
})

control.merge(together,on='zip_code',how='left')

这将给你以下结果:

    payment  zip_code           age
0      Rent     94053           NaN
1  Mortgage     47283  [78, 39, 35]
2      Rent     25769  [82, 33, 19]

正如你可以看到你有1 NaN的年龄,因为94053不在“在一起”数据帧中。

 类似资料:
  • 问题内容: 我正在尝试使用我的Derby数据库数据填充Netbeans GUI-builder jTable。 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回其中包含参数数据和列的tableModel,因为我知道在GUI中执行此方法是一种不好的做法。在线上的所有教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它看不到数据和列,

  • 我在Account.java类中使用以下代码: 理想情况下,我希望能够返回包含参数数据和列的tableModel,因为我知道在我的GUI中使用这种方法是不好的做法。所有在线教程都没有显示如何将数据发送到另一个类,它们只是在GUI类中执行数据库代码。 我有一个错误,它无法看到数据和列,因为它们是在我的方法的一个不可访问的部分中声明和使用的。在我完成这些之后,我需要找到一种方法来将它传递给我的GUI类

  • 问题内容: 我有一个HTML表单,可以通过ajax保存到数据库中。为了获得键/值对的查询字符串,我使用了非常方便的函数,如下所示: 现在,我想加载一个空白表格,并用数据库中的数据重新填充它,该数据是通过ajax调用作为JSON字符串传递的。我已经能够获得具有正确键/值对的Javascript对象,如下所示: 重新填写表格的最简单,最优雅的方法是什么? 请记住,表单的输入元素是文本,选择,复选框和单

  • series(string $value,[ string $categories]) string $value $config = ['path' => './tests']; ​ $fileObject = new \Vtiful\Kernel\Excel($config); ​ $fileObject = $fileObject->fileName('tutorial.xlsx'); $

  • factory 辅助函数 必须 使用 factory 方法来做数据填充,因为是框架提倡的,并且可以同时为测试代码服务。 运行效率 开发数据填充时,必须 特别注意 php artisan db:seed 的运行效率,否则随着项目的代码量越来越大,db:seed 的运行时间会变得越来越长,有些项目多达几分钟甚至几十分钟。 原则是: Keep it lighting speed. 只有当 db:seed

  • 我在SQL Server 2012中有两个表 表1 表2 每个用户可以拥有1到8个权限。 我需要创建一个视图,该视图将为我提供具有8个权限条目的UserID,其中任何未使用的条目都包含null值,即条目的顺序无关紧要。 这让我很困惑,我甚至不知道从哪里开始?