相关疑难解决方法(0)

熊猫合并101

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

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

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

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

python merge join pandas

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

NameError:名称'reduce'未在Python中定义

我正在使用Python 3.2.试过这个:

xor = lambda x,y: (x+y)%2
l = reduce(xor, [1,2,3,4])
Run Code Online (Sandbox Code Playgroud)

并得到以下错误:

l = reduce(xor, [1,2,3,4])
NameError: name 'reduce' is not defined
Run Code Online (Sandbox Code Playgroud)

尝试打印reduce到交互式控制台 - 出现此错误:

NameError: name 'reduce' is not defined
Run Code Online (Sandbox Code Playgroud)


reduce在Python 3.2真的删除?如果是这样的话,还有什么选择呢?

python reduce python-3.2

176
推荐指数
3
解决办法
10万
查看次数

Python:pandas合并多个数据帧

我有不同的数据帧,需要根据日期列将它们合并在一起.如果我只有两个数据帧,我可以使用df1.merge(df2, on='date')它来做三个数据帧df1.merge(df2.merge(df3, on='date'), on='date'),但是,使用多个数据帧,它变得非常复杂和难以理解.

所有数据帧都有一个共同的列 - date但它们没有相同数量的行或列,我只需要每个日期对每个数据帧都是通用的那些行.

所以,我正在尝试编写一个递归函数,它返回一个包含所有数据的数据帧,但它不起作用.那么我应该如何合并多个数据帧呢?

我试图diferent的方式,得到了类似的错误out of range,keyerror 0/1/2/3can not merge DataFrame with instance of type <class 'NoneType'>.

这是我写的脚本:

dfs = [df1, df2, df3] # list of dataframes

def mergefiles(dfs, countfiles, i=0):
    if i == (countfiles - 2): # it gets to the second to last and merges it with the last
        return

    dfm = dfs[i].merge(mergefiles(dfs[i+1], countfiles, i=i+1), on='date')
    return dfm

print(mergefiles(dfs, len(dfs)))
Run Code Online (Sandbox Code Playgroud)

一个例子:df_1:

May 19, …
Run Code Online (Sandbox Code Playgroud)

python merge data-analysis dataframe pandas

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

DataFrame的几个时间序列

我有几个时间序列合并到一个常见的DataFrame的问题.我正在使用的示例代码:

import pandas
import datetime
import numpy as np

start = datetime.datetime(2001, 1, 1)
end = datetime.datetime(2001, 1, 10)
dates = pandas.date_range(start, end)
serie_1 = pandas.Series(np.random.randn(10), index = dates)
start = datetime.datetime(2001, 1, 2)
end = datetime.datetime(2001, 1, 11)
dates = pandas.date_range(start, end)
serie_2 = pandas.Series(np.random.randn(10), index = dates)
start = datetime.datetime(2001, 1, 3)
end = datetime.datetime(2001, 1, 12)
dates = pandas.date_range(start, end)
serie_3 = pandas.Series(np.random.randn(10), index = dates)

print 'serie_1'
print serie_1
print 'serie_2'
print serie_2
print 'serie_3'
print …
Run Code Online (Sandbox Code Playgroud)

python time-series pandas

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

Pandas:合并多个数据帧和控制列名?

我想将九个Pandas数据帧合并到一个数据帧中,在两列上进行连接,控制列名.这可能吗?

我有九个数据集.所有这些都有以下列:

org, name, items,spend
Run Code Online (Sandbox Code Playgroud)

我想将它们加入到包含以下列的单个数据框中:

org, name, items_df1, spend_df1, items_df2, spend_df2, items_df3...
Run Code Online (Sandbox Code Playgroud)

我一直在阅读有关合并和加入的文档.我现在可以合并两个数据集,如下所示:

ad = pd.DataFrame.merge(df_presents, df_trees,
                        on=['practice', 'name'],
                        suffixes=['_presents', '_trees'])
Run Code Online (Sandbox Code Playgroud)

这很好用,print list(aggregate_data.columns.values)给我看了以下几列:

[org', u'name', u'spend_presents', u'items_presents', u'spend_trees', u'items_trees'...]
Run Code Online (Sandbox Code Playgroud)

但是我如何为九列做到这一点?merge似乎每次只接受两个,如果我按顺序执行,我的列名最终会变得非常混乱.

python pandas

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

在 Pandas DataFrame 中创建多列的所有可能组合

鉴于以下数据框,

df = pd.DataFrame({'Student':['Siri','Alexa'], 'Class':['6', '7'], 'Section':['A','B'], 'Teacher':['Ravi','Mark'], 'School':['C','D']})
Run Code Online (Sandbox Code Playgroud)

我想返回一个包含所有列值的所有可能组合的表。我使用下面的代码实现了这一点

df['key'] = 1

df1 = pd.merge(df.loc[:, ['key','Student']], df.loc[:,['key','Class']], how='outer')

df2 = df1.merge(df.loc[:,['key','Section']], how='outer')

df3 = df2.merge(df.loc[:,['key','Teacher']], how='outer')

df4 = df3.merge(df.loc[:,['key','School']], how='outer')

df4.drop(columns='key', inplace=True)
Run Code Online (Sandbox Code Playgroud)

完成此操作的最简单方法是什么,因为我有 15 列,通过上述方法,会导致 14 次合并和低效代码?

python dataframe pandas

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

在列上合并多个数据帧

我想合并/加入多个Dataframes,到目前为止我没有运气.我找到了merge方法,但它只适用于两个Dataframe.我也发现这个SO 答案建议做这样的事情:

df1.merge(df2,on='name').merge(df3,on='name')
Run Code Online (Sandbox Code Playgroud)

不幸的是,它不适用于我的情况,因为我有20多个数据帧.

我的下一个想法是使用join.根据连接多个数据帧时的参考,我需要使用列表,只有我可以加入索引列.所以我更改了所有列的索引(好吧,它可以通过语法轻松完成)并最终得到如下内容:

df.join([df1,df2,df3])
Run Code Online (Sandbox Code Playgroud)

不幸的是,这种方法也失败了,因为其他列名在所有数据帧中都是相同的.我决定做最后一件事,那就是重命名所有列.但是当我最终加入所有内容时:df = pd.Dataframe()df.join([df1,df2,df3])

我收到了空数据框.我不知道,我怎么能加入他们.有人可以提出更多建议吗?

EDIT1:

样本输入:

import pandas as pd

df1 = pd.DataFrame(np.array([
    ['a', 5, 19],
    ['b', 14, 16],
    ['c', 4, 9]]),
    columns=['name', 'attr1', 'attr2'])
df2 = pd.DataFrame(np.array([
    ['a', 15, 49],
    ['b', 4, 36],
    ['c', 14, 9]]),
    columns=['name', 'attr1', 'attr2'])

df1 
  name attr1 attr2
0    a     5    19
1    b    14    16
2    c     4     9

df2
  name attr1 attr2
0    a    15    49
1    b     4 …
Run Code Online (Sandbox Code Playgroud)

python dataframe pandas

4
推荐指数
1
解决办法
904
查看次数

查找多个数据帧列之间的公共元素

希望你能帮助我.我是蟒蛇和熊猫的新手,所以请耐心等待.我试图找到三个数据框之间的常用词,我正在使用Jupiter Notebook.

仅举例如:

df1=
A
dog
cat
cow 
duck
snake

df2=
A
pig
snail
bird
dog

df3=
A
eagle
dog 
snail
monkey
Run Code Online (Sandbox Code Playgroud)

在所有数据框中只有一列是A.我想找到1.所有列中的常用词2.对于它们自己的列而言并不共同的词.例; duck是df1独有的,snail是df2独有的,而monkey是df3独有的.我正在使用以下代码进行一些使用,但没有得到我想要的简单,

df1[df1['A'].isin(df2['A']) & (df2['A']) & (df3['A'])]
Run Code Online (Sandbox Code Playgroud)

请告诉我哪里出错了.干杯

python string intersection series pandas

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

如何在任意顺序中找到多个pandas数据帧中的一对列的交集?

我有多个pandas数据帧,为了保持简单,让我说我有三个.

   >> df1=
       col1  col2
   id1  A     B  
   id2  C     D  
   id3  B     A  
   id4  E     F  


    >> df2=
       col1  col2
   id1  B     A  
   id2  D     C  
   id3  M     N  
   id4  F     E  

    >> df3=
       col1  col2
   id1  A     B  
   id2  D     C  
   id3  N     M  
   id4  E     F  
Run Code Online (Sandbox Code Playgroud)

需要的结果是:

    >> df=
       col1  col2
   id1  A     B
   id2  C     D
   id3  E     F
Run Code Online (Sandbox Code Playgroud)

因为对(A,B),(C,D),(E,F)出现在所有数据帧中,尽管它可以颠倒.

使用pandas merge时,只考虑列的传递方式.为了检查我的观察,我尝试了两个数据框的以下代码:

df1['reverse_1'] = (df1.col1+df1.col2).isin(df2.col1 + df2.col2)

df1['reverse_2'] = (df1.col1+df1.col2).isin(df2.col2 + df2.col1)
Run Code Online (Sandbox Code Playgroud)

我发现结果不同:

col1    col2    reverse_1 …
Run Code Online (Sandbox Code Playgroud)

python dataframe python-3.x pandas

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

基于索引列合并两个数据帧

我有两个数据框,我想根据匹配的行将它们合并为一个数据框。我的数据框看起来像这样

DF_1

设置_1传真_1传真_2
Abc_1 45 76
Abc_2 46 77
Abc_3 47 78
Abc_4 48 79
Abc_5 49 80
Abc_6 50 81
Abc_7 51 82
Abc_8 52 83
Abc_9 53 84
Abc_10 54 85

df_2

设置_1传真_3传真_4
Abc_1 69 42
Abc_2 70 43
Abc_3 71 44
Abc_6 72 45
Abc_5 73 46
Abc_6 74 47
Abc_7 75 48
Abc_8 76 49
Abc_9 77 50
Abc_10 78 51
Abc_11 55 86
Abc_12 56 87
Abc_13 57 88
Abc_14 58 89
Abc_15 59 90 …

python pandas

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