相关疑难解决方法(0)

熊猫合并101

  • 如何用pandas 执行(LEFT| RIGHT| FULL)(INNER| OUTER)连接?
  • 合并后如何为缺失的行添加NaN?
  • 合并后如何摆脱NaN?
  • 我可以合并索引吗?
  • 如何合并多个DataFrame?
  • mergejoinconcatupdate?谁?什么?为什么?!

... 和更多.我已经看到了这些反复出现的问题,询问了pandas合并功能的各个方面.今天关于合并及其各种用例的大部分信息在几十个措辞严厉,不可搜索的帖子中都是分散的.这里的目的是为后代整理一些更重要的观点.

这个QnA应该是关于常见熊猫习语的一系列有用的用户指南的下一部分(参见关于转动的这篇文章,以及关于连接的这篇文章,我将在稍后介绍).

请注意,这篇文章并不是文档的替代品,所以请阅读它!一些例子来自那里.

python merge join pandas

271
推荐指数
6
解决办法
4万
查看次数

Numpy:x和y数组的笛卡尔积指向单个2D点阵列

我有两个numpy数组,定义网格的x和y轴.例如:

x = numpy.array([1,2,3])
y = numpy.array([4,5])
Run Code Online (Sandbox Code Playgroud)

我想生成这些数组的笛卡尔积来生成:

array([[1,4],[2,4],[3,4],[1,5],[2,5],[3,5]])
Run Code Online (Sandbox Code Playgroud)

在某种程度上,由于我需要在循环中多次执行此操作,因此效率不高.我假设将它们转换为Python列表并使用itertools.product并返回到numpy数组并不是最有效的形式.

python numpy cartesian-product

134
推荐指数
8
解决办法
5万
查看次数

大熊猫中的笛卡儿产品

我有两个pandas数据帧:

from pandas import DataFrame
df1 = DataFrame({'col1':[1,2],'col2':[3,4]})
df2 = DataFrame({'col3':[5,6]})     
Run Code Online (Sandbox Code Playgroud)

获得笛卡尔积的最佳做法是什么(当然不像我这样明确地写出来)?

#df1, df2 cartesian product
df_cartesian = DataFrame({'col1':[1,2,1,2],'col2':[3,4,3,4],'col3':[5,5,6,6]})
Run Code Online (Sandbox Code Playgroud)

python pandas

84
推荐指数
7
解决办法
7万
查看次数

pandas两个数据帧交叉连接

我找不到任何关于交叉连接的内容,包括合并/加入或其他一些.我需要使用{my function}作为myfunc来处理两个数据帧.相当于:

{
    for itemA in df1.iterrows():
           for itemB in df2.iterrows():
                       t["A"] = myfunc(itemA[1]["A"],itemB[1]["A"])
 }      
Run Code Online (Sandbox Code Playgroud)

相当于:

{
 select myfunc(df1.A,df2.A),df1.A,df2.A from df1,df2;
}
Run Code Online (Sandbox Code Playgroud)

但我需要更有效的解决方案:如果使用apply我将是如何实现它们thx; ^^

python pandas

9
推荐指数
2
解决办法
3万
查看次数

在 DataFrame 中相对于列重复行

我有一个 Pandas DataFrame,如下所示:

df = pd.DataFrame({'col1': [1, 2, 3],
                   'col2': [4, 5, 6],
                   'col3': [7, 8, 9]})

df
    col1    col2    col3
0      1       4       7
1      2       5       8
2      3       6       9
Run Code Online (Sandbox Code Playgroud)

我想创建一个像这样的 Pandas DataFrame:

df_new
    col1    col2    col3
0      1       4       7
1      1       5       8
2      1       6       9
3      2       4       7
4      2       5       8
5      2       6       9
6      3       4       7
7      3       5       8
8      3       6       9
Run Code Online (Sandbox Code Playgroud)

是否有内置或内置 Pandas 方法的组合可以实现此目的?

即使 …

python dataframe pandas

9
推荐指数
6
解决办法
449
查看次数

Pandas相当于SQL CROSS JOIN(笛卡尔积)

假设我有两张桌子:

表格1:

   col1  col2
      0     1
      2     3
Run Code Online (Sandbox Code Playgroud)

表2:

   col3  col4
      5     6
      7     8
Run Code Online (Sandbox Code Playgroud)

在SQL中,如果我发出以下声明:

Select *
From Table1, Table2;
Run Code Online (Sandbox Code Playgroud)

我期望从两个表中获得包含所有组合的表格:

col1 col2 col3 col4
   0    1    5    6
   0    1    7    8
   2    3    5    6
   2    3    7    8
Run Code Online (Sandbox Code Playgroud)

有没有办法在pandas中使用两个数据帧做同样的事情?

python sql join pandas

7
推荐指数
1
解决办法
3074
查看次数

pandas cross join没有共同的列

如何使用pandas 执行完全外连接 两个数据帧的交叉连接而没有共同的列?

在MySQL中,您可以简单地执行:

SELECT *
FROM table_1
[CROSS] JOIN table_2;
Run Code Online (Sandbox Code Playgroud)

但在熊猫中,做:

df_1.merge(df_2, how='outer')
Run Code Online (Sandbox Code Playgroud)

给出错误:

MergeError: No common columns to perform merge on
Run Code Online (Sandbox Code Playgroud)

我到目前为止最好的解决方案是使用sqlite:

import sqlalchemy as sa
engine = sa.create_engine('sqlite:///tmp.db')
df_1.to_sql('df_1', engine)
df_2.to_sql('df_2', engine)
df = pd.read_sql_query('SELECT * FROM df_1 JOIN df_2', engine)

python pandas

6
推荐指数
1
解决办法
1万
查看次数

在 Python 中将嵌套的 JSON 转换为 CSV 文件

我知道这个问题已经被问过很多次了。我尝试了几种解决方案,但无法解决我的问题。

我有一个大的嵌套 JSON 文件 (1.4GB),我想把它弄平,然后将其转换为 CSV 文件。

JSON 结构是这样的:

{
  "company_number": "12345678",
  "data": {
    "address": {
      "address_line_1": "Address 1",
      "locality": "Henley-On-Thames",
      "postal_code": "RG9 1DP",
      "premises": "161",
      "region": "Oxfordshire"
    },
    "country_of_residence": "England",
    "date_of_birth": {
      "month": 2,
      "year": 1977
    },
    "etag": "26281dhge33b22df2359sd6afsff2cb8cf62bb4a7f00",
    "kind": "individual-person-with-significant-control",
    "links": {
      "self": "/company/12345678/persons-with-significant-control/individual/bIhuKnFctSnjrDjUG8n3NgOrl"
    },
    "name": "John M Smith",
    "name_elements": {
      "forename": "John",
      "middle_name": "M",
      "surname": "Smith",
      "title": "Mrs"
    },
    "nationality": "Vietnamese",
    "natures_of_control": [
      "ownership-of-shares-50-to-75-percent"
    ],
    "notified_on": "2016-04-06"
  }
}
Run Code Online (Sandbox Code Playgroud)

我知道这很容易用pandas模块完成,但我不熟悉它。

已编辑

所需的输出应该是这样的:

company_number, address_line_1, locality, …
Run Code Online (Sandbox Code Playgroud)

python csv json data-conversion

6
推荐指数
3
解决办法
4万
查看次数

如何为熊猫数据帧的每一行分配值?

我一直在尝试为数据框的每一行分配一个值,但我一直没有这样做(我是熊猫新手),所以如果有人可以提供帮助,我将非常感激!

我有两个数据框。在输入数据框中,我有以下品牌:

brand_raw.head()

brand_name
0   Nike
1   Lacoste
2   Adidas
Run Code Online (Sandbox Code Playgroud)

然后,在输出数据集上,我有一些对象:

object_raw.head()

category_id object_name
0   24  T-shirt
1   45  Shorts
2   32  Dress
Run Code Online (Sandbox Code Playgroud)

我需要的是一个包含所有对象和所有品牌的数据框:

to_raw.head()

category_id object_name brand_name
0   24  T-shirt     Nike
1   45  Shorts      Nike
2   32  Dress       Nike
3   24  T-shirt     Lacoste
4   45  Shorts      Lacoste
5   32  Dress       Lacoste
6   24  T-shirt     Adidas
7   45  Shorts      Adidas
8   32  Dress       Adidas

Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用apply函数,对行进行迭代,但是最终覆盖了值,所以我写了最后一个品牌:

0   24  T-shirt     Nike
1   45  Shorts      Nike
2   32  Dress       Nike
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

def insert_value_in_every_row(input_df, …
Run Code Online (Sandbox Code Playgroud)

python apply dataframe pandas

6
推荐指数
1
解决办法
172
查看次数

Python:尝试交叉应用两个数据帧

我试图获得一个数据帧,其中包含两个不同数据帧中两个独立列的所有组合.我的数据框看起来像这样:

>>>first_df                          >>>second_df
    id test                                id text   
 0   1  abc                              0 11  uvw
 1   2  def                              1 22  xyz 
 2   3  ghi
Run Code Online (Sandbox Code Playgroud)

由此,我能够使用这种方法获得组合:

df = pd.DataFrame(list(itertools.product(list(a['test']),list(b['text']))),columns=['test','text'])
>>>df
    test text
 0  abc  uvw
 1  abc  xyz
 2  def  uvw
 3  def  xyz
 4  ghi  uvw
 5  ghi  xyz
Run Code Online (Sandbox Code Playgroud)

我无法理解的是,如何将相关的id列也添加到我的数据框中,如下所示:

>>>df
    id test text kid
 0   1 abc  uvw   11
 1   1 abc  xyz   22
 2   2 def  uvw   11
 3   2 def  xyz   22
 4   3 ghi  uvw   11
 5   3 …
Run Code Online (Sandbox Code Playgroud)

python apply dataframe pandas

3
推荐指数
1
解决办法
1064
查看次数

pandas groupby 返回额外索引

dft = pd.DataFrame({'C1': ['A','A','B','B'], 
                    'C2': [1,2,3,4]}) 

def lam3(df):
    return pd.DataFrame({'X': ['C','D','E'], 
                    'Y': [11,22,33]})
Run Code Online (Sandbox Code Playgroud)

给定上述数据帧和函数(我无法更改),我想运行 groupby+apply 以便每个组返回一个数据帧,如下所示

    C1  C2  X   Y
0   A   1   C   11
1   A   1   D   22
2   A   1   E   33
3   A   2   C   11
4   A   2   D   22
5   A   2   E   33
6   B   3   C   11
7   B   3   D   22
8   B   3   E   33
9   B   4   C   11
10  B   4   D   22
11  B   4   E   33 …
Run Code Online (Sandbox Code Playgroud)

python group-by pandas

3
推荐指数
1
解决办法
2559
查看次数

数据帧行的快速笛卡尔总和

我在 3 轴 (x, y, z) 中有两个错误数据帧:

df1 = pd.DataFrame([[0, 1, 2], [-1, 0, 1], [-2, 0, 3]], columns = ['x', 'y', 'z'])
df2 = pd.DataFrame([[1, 1, 3], [1, 0, 2], [1, 0, 3]], columns = ['x', 'y', 'z'])
Run Code Online (Sandbox Code Playgroud)

我正在寻找一种快速的方法来找到两个数据帧的每一行的平方的笛卡尔和。

编辑我目前的解决方案:

cartesian_sum = list(np.sum(list(tup), axis = 0).tolist() 
                    for tup in itertools.product( (df1**2).to_numpy().tolist(),
                                                  (df2**2).to_numpy().tolist() ) )

cartesian_sum
>>> 
[[1, 2, 13],
 [1, 1, 8],
 [1, 1, 13],
 [2, 1, 10],
 [2, 0, 5],
 [2, 0, 10],
 [5, 1, 18],
 [5, …
Run Code Online (Sandbox Code Playgroud)

python scipy python-itertools dataframe pandas

2
推荐指数
1
解决办法
129
查看次数