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

熊猫数据帧中两个非数字列之间的关联

莘康裕
2023-03-14

我从表中的SQL查询中获取数据到我的熊猫数据框。数据如下所示:

        group  phone_brand
0      M32-38          小米
1      M32-38          小米
2      M32-38          小米
3      M29-31          小米
4      M29-31          小米
5      F24-26         OPPO
6      M32-38          酷派
7      M32-38          小米
8      M32-38         vivo
9      F33-42          三星
10     M29-31          华为
11     F33-42          华为
12     F27-28          三星
13     M32-38          华为
14       M39+         艾优尼
15     F27-28          华为
16     M32-38          小米
17     M32-38          小米
18       M39+          魅族
19     M32-38          小米
20     F33-42          三星
21     M23-26          小米
22     M23-26          华为
23     M27-28          三星
24     M29-31          小米
25     M32-38          三星
26     M32-38          三星
27     F33-42          三星
28     M32-38          三星
29     M32-38          三星
...       ...          ...
74809  M27-28          华为
74810  M29-31          TCL

现在我想从这两列中找出相关性和频率,并用Matplotlib将其可视化。我试过这样的方法:

DataFrame.plot(style='o')
plt.show() 

现在,我如何以最简单的方式将这种关联可视化呢?

共有3个答案

宋勇
2023-03-14

除了piRSquared非常清楚地解释的方法之外,您还可以使用LabelEncoder将值转换为数字形式,以确保机器正确解释功能

#Import label encoder
from sklearn.preprocessing import LabelEncoder

#label_encoder object 
le = LabelEncoder()

#Fit label encoder and return encoded labels
df['group'] = le.fit_transform(df['group'])

df['phone_brand'] = le.fit_transform(df['phone_brand'] )

#Finding correlation
df.corr()

#output for first 10 rows

               group     phone_brand
      group  1.00000         0.67391
phone_brand  0.67391         1.00000

在应用了< code>LabelEncoder之后,我们的数据帧由此转换而来

     group  phone_brand
0   M32-38          小米
1   M32-38          小米
2   M32-38          小米
3   M29-31          小米
4   M29-31          小米
5   F24-26         OPPO
6   M32-38          酷派
7   M32-38          小米
8   M32-38         vivo
9   F33-42          三星
10  M29-31          华为

对此

   group    phone_brand
0      3              4
1      3              4
2      3              4
3      2              4
4      2              4
5      0              0
6      3              5
7      3              4
8      3              1
9      1              2
10     2              3

对于多列,您可以浏览答案。

淳于慎之
2023-03-14

使用 pandas.factorize() 方法,该方法可以通过标识不同的值来获取数组的数字表示形式。

冀耀
2023-03-14

要快速获取相关性,请执行以下操作:

df.apply(lambda x: x.factorize()[0]).corr()

                group  phone_brand
group        1.000000     0.427941
phone_brand  0.427941     1.000000

热图

import seaborn as sns

sns.heatmap(pd.crosstab(df.group, df.phone_brand))
 类似资料:
  • 我有两个具有多列的数据帧。 我想比较df1['id']和df2['id'],并返回一个新的df,其中列['correct_id']具有匹配值。例子: df1: df2 这是我的代码: 我得到的结果是: 预期输出: 我该怎么解决这个问题拜托

  • 我正在尝试连接到数据帧。它们看起来像这样 期望的最终目标是: 我一直试图使用pd.merge和。连接函数与on='外'设置不成功

  • 我需要将两个数据帧和一个接一个地连接起来,它们具有相同的行数(),而不考虑任何键。此函数类似于

  • 我肯定错过了一些简单的东西。尝试合并熊猫中的两个数据帧,它们的列名基本相同,但右边的数据帧有一些左边没有的列,反之亦然。 我已尝试使用外部联接进行联接: 但这会产生: 我还指定了一个要连接的列(例如,on="id"),但这会重复所有列,除了"id",如attr_1_x、attr_1_y,这并不理想。我还传递了整个列列表(有很多)到on: 其产生: 我错过了什么?我想得到一个附加了所有行的df,并且

  • 我有两个系列和具有相同的(非连续的)索引。如何将和组合为DataFrame中的两列,并将其中一个索引保留为第三列?

  • 我有一个大熊猫时间帧,它有一个列,这个时间格式:例如(小时,分钟,秒)。这些值是通过熊猫从我的SQL数据库中提取的,具有以下查询函数 我想将这些时间值转换为分钟(或秒),因为我想对作为我的持续时间变量的值执行线性回归。我该怎么做呢?是否有一种方法可以将这些值(例如,将<code>14:30:00 示例数据帧: