小编mor*_*rty的帖子

Pandas左外连接多个列上的多个数据帧

我是使用DataFrame的新手,我想知道如何在一系列表的多个列上执行左外连接的SQL等价物

例:

df1: 
Year    Week    Colour    Val1 
2014       A       Red      50
2014       B       Red      60
2014       B     Black      70
2014       C       Red      10
2014       D     Green      20

df2:
Year    Week    Colour    Val2
2014       A     Black      30
2014       B     Black     100
2014       C     Green      50
2014       C       Red      20
2014       D       Red      40

df3:
Year    Week    Colour    Val3
2013       B       Red      60
2013       C     Black      80
2013       B     Black      10
2013       D     Green      20
2013       D       Red      50
Run Code Online (Sandbox Code Playgroud)

基本上我想做类似这样的SQL代码(注意df3没有加入Year):

SELECT df1.*, …
Run Code Online (Sandbox Code Playgroud)

python sql merge pandas

55
推荐指数
2
解决办法
10万
查看次数

pandas读取sql db2破坏小数

我试图从使用db2读取数据表.但是,似乎只是忽略了小数,浮点数就会以某种方式乘以100.例如100.50成为10050.0在读入数据帧的大熊猫.

BTW我来自挪威,所以小数用a ,而不是a表示..我不知道这是否重要.

我使用以下SQL(在WinSQL Lite中):

SELECT CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1
Run Code Online (Sandbox Code Playgroud)

, 这使:

CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
          1    ASSET_X       259131,72
          1    ASSET_Y       718533,33   
Run Code Online (Sandbox Code Playgroud)

我知道这是正确的,所以问题不在于数据.

在Spyder中,使用Python,我有

import pandas as pd
import pyodbc as po

DSN = 'MY_DSN'
UID = 'MY_USER'
PWD = 'MY_PASSWORD'
CON = po.connect('DSN={0}; UID={1}; PWD={2}'.format(DSN, UID, PWD))

SQL = """SELECT CUSTOMER_ID, FUND_NAME, SAVINGS_AMOUNT
FROM SAVINGS_TABLE
WHERE CUSTOMER_ID = 1"""

df = pd.read_sql(SQL, CON)

df
Out[16]: 
    CUSTOMER_ID …
Run Code Online (Sandbox Code Playgroud)

python sql pandas

10
推荐指数
1
解决办法
751
查看次数

设置值multiindex Pandas

我是Python和Pandas的新手.

我正在尝试构建一个数据帧,然后用值填充它.

我构建了我的数据帧

from pandas import *

ageMin = 21
ageMax = 31
ageStep = 2

bins_sumins = [0, 10000, 20000]
bins_age = list(range(ageMin, ageMax, ageStep))
indeks_sex = ['M', 'F']
indeks_age  =  ['[{0}-{1})'.format(bins_age[i-1], bins_age[i]) for i in range(1, len(bins_age))]
indeks_sumins = ['[{0}-{1})'.format(bins_sumins[i-1], bins_sumins[i]) for i in range(1, len(bins_sumins))]
indeks = MultiIndex.from_product([indeks_age, indeks_sex, indeks_sumins], names=['Age', 'Sex', 'Sumins'])

cols = ['A', 'B', 'C', 'D']

df = DataFrame(data = 0, index = indeks, columns = cols)
Run Code Online (Sandbox Code Playgroud)

到目前为止一切都很好.我能够为整个值集赋值

>>> df['A']['[21-23)']['M'] = 1
>>> df …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

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

如何有条件地从pandas数据帧中删除重复项

请考虑以下数据帧

import pandas as pd
df = pd.DataFrame({'A' : [1, 2, 3, 3, 4, 4, 5, 6, 7],
                   'B' : ['a','b','c','c','d','d','e','f','g'],
                   'Col_1' :[np.NaN, 'A','A', np.NaN, 'B', np.NaN, 'B', np.NaN, np.NaN],
                   'Col_2' :[2,2,3,3,3,3,4,4,5]})
df
Out[92]: 
    A  B Col_1  Col_2
 0  1  a   NaN      2
 1  2  b     A      2
 2  3  c     A      3
 3  3  c   NaN      3
 4  4  d     B      3
 5  4  d   NaN      3
 6  5  e     B      4
 7  6  f   NaN      4
 8  7 …
Run Code Online (Sandbox Code Playgroud)

python duplicates dataframe pandas

8
推荐指数
2
解决办法
3569
查看次数

在Python中引发错误后,如何在数据框中正确标记损坏的数据表

我有一个大型数据框,其中包含(挪威语)社会安全号码.可以通过特殊算法从这个数字中获取出生日期.然而,不时有一个非法的社会安全号码侵入数据库,破坏了计算.

我想要做的是标记每个具有非法社会安全号码的行,以及显示错误的日志消息.

考虑以下构造的示例

import pandas as pd
from datetime import date

sample_data = pd.DataFrame({'id' : [1, 2, 3], \
                            'sec_num' : [19790116, 19480631, 19861220]})


# The actual algorithm transforming the sec number is more complicated
# this is just for illustration purposes
def int2date(argdate: int):

    try:
        year = int(argdate / 10000)
        month = int((argdate % 10000) / 100)
        day = int(argdate % 100)
        return date(year, month, day)
    except ValueError:
        raise ValueError("Value:{0} not a legal date.".format(argdate))
Run Code Online (Sandbox Code Playgroud)

我想创建以下输出

   id   sec_num date_of_birth  is_in_error …
Run Code Online (Sandbox Code Playgroud)

python error-handling pandas

8
推荐指数
1
解决办法
98
查看次数

熊猫在特定日期创建日期范围

我想每月创建一个给定数量日期的列表(或数组或其他任何内容)。

基本上我想要的是这个

>>>some_function(start_date=date(2005, 5, 14), periods=4, freq='M')
['2005-05-14', '2005-06-14', '2005-07-14', '2005-08-14']
Run Code Online (Sandbox Code Playgroud)

如果 startmonth 的那一天接近月底,我想要这个

>>>some_function(start_date=date(2007, 12, 31), periods=4, freq='M')
['2007-12-31', '2008-01-31', '2008-02-29', '2008-03-31']
Run Code Online (Sandbox Code Playgroud)

我知道 pandas date_range 函数,但是它会产生这个

pd.date_range(date(2005, 5, 14), periods=4, freq='M')
Out[1]: DatetimeIndex(['2005-05-31', '2005-06-30', '2005-07-31', '2005-08-31'],
          dtype='datetime64[ns]', freq='M')
Run Code Online (Sandbox Code Playgroud)

即它将月末设置为日期。这不是我想要的。

显然,这可以在周期数上迭代产生,但是当 startmonth 的日期接近该月的最后一天时,这会产生麻烦。

有没有人知道产生这个的函数,或者上面概述的方法是唯一的方法?

python datetime pandas

7
推荐指数
2
解决办法
4242
查看次数

在Python中,比较None系列

我正在使用python shift函数来比较Series中的值是否等于previus值.基本上

import pandas as pd

a = pd.Series([2, 2, 4, 5])

a == a.shift()
Out[1]: 
0    False
1     True
2    False
3    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

这是预期的.(第一次比较是假的,因为我们正在与移位系列的"NA"进行比较).现在,我确实有系列,我没有任何价值,即."没有",就像这样

b = pd.Series([None, None, 4, 5])
Run Code Online (Sandbox Code Playgroud)

这里两个"无"的比较给出"假"

b == b.shift()
Out[3]: 
0    False
1    False
2    False
3    False
dtype: bool
Run Code Online (Sandbox Code Playgroud)

我愿意接受某种哲学推理,认为比较"无"是毫无意义的等等

c = None
d = None
c == d
Out[4]: True
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?!

而且,我真正想知道的是; 我怎么能对我的"b"系列进行比较,因为我希望它将"无"视为平等?那就是我想要b == b.shift()给出与== a.shift()给出的相同的结果.

python pandas

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

对于具有NaN的列,rowwise min()和max()失败

我试图采用包含日期的两列的行的最大(和最小)

from datetime import date
import pandas as pd
import numpy as np    

df = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
                               date(2013, 1, 1), date(2016, 6, 1)],
                   'date_b' : [date(2012, 7, 1), date(2013, 1, 1), 
                               date(2014, 3, 1), date(2013, 4, 1)]})

df[['date_a', 'date_b']].max(axis=1)
Out[46]: 
0    2015-01-01
1    2013-01-01
2    2014-03-01
3    2016-06-01
Run Code Online (Sandbox Code Playgroud)

正如所料.但是,如果数据帧包含单个NaN值,则整个操作将失败

df_nan = pd.DataFrame({'date_a' : [date(2015, 1, 1), date(2012, 6, 1),
                                   np.NaN, date(2016, 6, 1)],
                       'date_b' : [date(2012, 7, 1), date(2013, 1, 1), 
                                   date(2014, 3, 1), …
Run Code Online (Sandbox Code Playgroud)

python datetime date nan pandas

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

摆脱pyximport

我正在尝试使用Cython.我使用setup.py和build而不是让pyximport这样做.但是,每次导入我的模块时,都会调用pyximport.Pyximport无法构建,一切都崩溃了.

我用Spyder.我的项目中没有对pyximport的单一引用,但是Spyder似乎并不关心并且一直在调用pyximprot.

我从命令窗口(Spyder外面)调用了我的程序,它运行得很好.

我怎样才能摆脱对pyximport的调用?或者还有其他事情发生了吗?

import c_result
Traceback (most recent call last):

  File "<ipython-input-2-3e92d1c50179>", line 1, in <module>
    import c_result

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyximport\pyximport.py", line 458, in load_module
language_level=self.language_level)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyximport\pyximport.py", line 231, in load_module
raise exc.with_traceback(tb)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyximport\pyximport.py", line 215, in load_module
inplace=build_inplace, language_level=language_level)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyximport\pyximport.py", line 191, in build_module
reload_support=pyxargs.reload_support)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\pyximport\pyxbuild.py", line 102, in pyx_to_dll
dist.run_commands()

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\distutils\dist.py", line 955, in run_commands
self.run_command(cmd)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\distutils\dist.py", line 974, in run_command
cmd_obj.run()

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\site-packages\Cython\Distutils\old_build_ext.py", line 185, in run
_build_ext.build_ext.run(self)

  File "C:\Users\ac22376.ONEADR\AppData\Local\Continuum\Anaconda3\lib\distutils\command\build_ext.py", line …
Run Code Online (Sandbox Code Playgroud)

cython spyder

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

用于在spyder中重新启动内核的键盘快捷方式

有人知道在Spyder中重新启动内核的键盘快捷键吗?

它说应该是Ctrl +,.但是不起作用。我正在使用挪威语键盘,因此我认为它与此有关。

我尝试了Ctrl+的各种组合都something无济于事。

其他使用非US / EN键盘的人有此问题吗?有什么建议吗?这不是生死攸关的事情,但是知道捷径会很高兴。

python spyder

5
推荐指数
1
解决办法
5767
查看次数