小编Joo*_*oop的帖子

使用 .loc 进行分配的 Pandas Dataframe 给出了意想不到的结果

我正在 pandas 中进行一些计算,并且 .loc 方法产生了意外的结果。不确定是我滥用语法还是错误。

df = pd.DataFrame(index=['series1', 'series2', 'series3'])
df['prev value/unit'] = [99,99,99]
df['value'] = [100,100,100]
df['units'] = [100,100,0]
df['value/unit'] = df['value']/df['units']
Run Code Online (Sandbox Code Playgroud)

创建一个数据框,其中会有一些除零值,如下所示。业务逻辑规定,如果存在 /0,则应使用先前的值/单位。

         prev value/unit  value  units  value/unit
series1               99    100    100    1.000000
series2               99    100    100    1.000000
series3               99    100      0         inf
Run Code Online (Sandbox Code Playgroud)

所以添加:

df.loc[df.units == 0, 'value/unit'] = df['prev value/unit']
Run Code Online (Sandbox Code Playgroud)

达到了预期的效果,上面的 inf 被 99(之前的单位值)正确覆盖。

但是如果没有div/0。

df.loc[df.units == 0, 'value/unit']
#is a empty Series
#Series([], name: value/unit, dtype: float64)
Run Code Online (Sandbox Code Playgroud)

并且分配df['prev value/unit']给它会覆盖所有值!!!!

所以例如

df = pd.DataFrame(index=['series1', 'series2', …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

tempfile目录最终是否被系统清除

我正在使用脚本进行一些处理,并且当前正在使用固定目录来执行此文件操作.我想使用tempfile模块的tempdir以更优雅的方式执行此操作.

使用以下代码:

import os
import tempfile

#define the location of 'mytemp' parent folder relative to the system temp
sysTemp = tempfile.gettempdir()
myTemp = os.path.join(sysTemp,'mytemp')

#You must make sure myTemp exists
if not os.path.exists(myTemp):
    os.makedirs(myTemp)
Run Code Online (Sandbox Code Playgroud)

在我的Mac上它创建了一个文件夹:/ var/folders/nn/zyl78zb .....在PC上它创建了一个(我的用户目录中的隐藏文件夹).

从tempfile模块文档我明白,如果你创建一个tempdir,你必须自己清除它.有时我想去查看中间文件,所以我不想自动删除它们. 如果我离开它们,操作系统最终会清理这些目录(重启后等)? 如果我不直接从脚本中清除它们,下面的运行可能会得到一个不同的tempdir.这最终可能导致大量未使用和不需要的文件.

我已经搜索了tempfile文档,但似乎无法找到答案.这可能是一个操作系统问题,但有临时文件模块经验的人应该知道.

python temporary-files

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

从字典或列表设置类实例变量

设置实例变量

我有两个清单:

var_names = ['var1',  'var2', 'var3']
var_values = [1, 2, 3]
Run Code Online (Sandbox Code Playgroud)

也可以是字典:

dict = {'var1': 1, 'var2':2, 'var3':3}
Run Code Online (Sandbox Code Playgroud)

我实际上是从 pandas 那里获取它们的,但是从那里到 dict 是通用且简单的。

这些实例变量列表的长度不断变化,但作为类实例化的一部分,我想将它们添加到实例变量中。例如对于上面给出的列表

self.var1 = var_values[0]
self.var2 = var_values[1]
self.var3 = var_values[2]
Run Code Online (Sandbox Code Playgroud)

如果变量名称和值位于字典中,则可以具有类似的代码。我想我大约一年前使用过setattr,但现在我无法弄清楚。任何指点。只需使用搜索即可找到垃圾邮件

python pandas

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

pandas to_sql 方法给出日期列错误

我有一个看起来像这样的数据框:

df = pd.DataFrame(index= pd.date_range('2014-01-01', periods=10))
df['date'] = df.index.map(lambda x: x.strftime('%d-%m-%Y'))
df['date'] = df.index
df['profit']= rand(10)
df['perf_period_id']=2
Run Code Online (Sandbox Code Playgroud)

还有一个 sqlite3 db 和一个名为 fee_profit 的表

费用_利润有 4 个字段:

  • id - 整数 - 主键
  • perf_period_id - 整数
  • 日期 - 日期
  • 利润 - 真实

当我尝试将数据帧写入数据库时​​(不显示数据库连接):

df.to_sql(name='fee_profit', index=False, con=db, if_exists='append')
Run Code Online (Sandbox Code Playgroud)

我得到以下代码:

252     else:
253         data = [tuple(x) for x in frame.values.tolist()]
--> 254     cur.executemany(insert_query, data)
255 
256 
InterfaceError: Error binding parameter 0 - probably unsupported type.
Run Code Online (Sandbox Code Playgroud)

没有传递主键(这可能是问题吗?)我把桌子弄得乱七八糟,看起来肯定是日期有问题。尝试了在索引中传递日期的各种组合,也是字符串,没有任何效果。

知道我哪里出错了。无法在任何地方找到使用此方法的示例。

使用 Pandas 0.13.1 和 sqlite 3 2.6.0。数据库是通过 …

python sql sqlite pandas

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

Pandas DataFrame列数据类型df.TT!= df?

一般问题,但我已经使用熊猫超过一年了,当我在pandas DataFrame列中混合类型时,我一直遇到麻烦.我经常会有一个像这样的DataFrame:

df2 =
             0          1          2           3           4
val_str      test       test       test        test       test
val_date     2014-01-15 2014-01-15 2014-01-15  2014-01-15 2014-01-15
val_float    1.5        1.5        1.5         1.5        1.5
val_int      1          1          1           1          1
Run Code Online (Sandbox Code Playgroud)

作为示例生成:

import pandas as pd
import datetime
df = pd.DataFrame(index=range(5))
df['val_str'] = "test"
df['val_date']= datetime.datetime(2014,1,15)
df['val_bool'] = True
df['val_float'] = 1.5
df['val_int'] = 1
df2=df.T
Run Code Online (Sandbox Code Playgroud)

令人费解的例子,但数据来自excel,csv等,并且很多时候行具有一致的数据类型而不是列.

Pandas似乎(大多数情况下)使用这种数据来处理它的方法,但是在选择或尝试对数据进行布尔运算时,我经常得到意想不到的结果.

用例如选择数据

df2[2]['val_bool']  #eems to work without problem
Run Code Online (Sandbox Code Playgroud)

似乎工作得很好,甚至用例如:

df2.ix['val_bool']  # works fine
Run Code Online (Sandbox Code Playgroud)

似乎按预期工作.尝试使用此切片进一步选择数据时,我经常遇到问题.

df2.ix['val_bool'].dtype
>>> dtype('O')
# trying boolean operations …
Run Code Online (Sandbox Code Playgroud)

python pandas

0
推荐指数
2
解决办法
214
查看次数

标签 统计

python ×5

pandas ×4

sql ×1

sqlite ×1

temporary-files ×1