我是使用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) 我试图从使用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和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) 请考虑以下数据帧
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) 我有一个大型数据框,其中包含(挪威语)社会安全号码.可以通过特殊算法从这个数字中获取出生日期.然而,不时有一个非法的社会安全号码侵入数据库,破坏了计算.
我想要做的是标记每个具有非法社会安全号码的行,以及显示错误的日志消息.
考虑以下构造的示例
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) 我想每月创建一个给定数量日期的列表(或数组或其他任何内容)。
基本上我想要的是这个
>>>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 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()给出的相同的结果.
我试图采用包含日期的两列的行的最大(和最小)
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) 我正在尝试使用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) 有人知道在Spyder中重新启动内核的键盘快捷键吗?
它说应该是Ctrl +,.但是不起作用。我正在使用挪威语键盘,因此我认为它与此有关。
我尝试了Ctrl+的各种组合都something无济于事。
其他使用非US / EN键盘的人有此问题吗?有什么建议吗?这不是生死攸关的事情,但是知道捷径会很高兴。