小编Pyt*_*ous的帖子

python pandas:如何在一个数据帧中查找行而不在另一个数据帧中查找?

假设我有两个表:people_all并且people_usa都具有相同的结构,因此具有相同的主键.

我怎样才能得到一张不在美国的人的表?在SQL中我会做类似的事情:

select a.*
from people_all a

left outer join people_usa u
on a.id = u.id

where u.id is null
Run Code Online (Sandbox Code Playgroud)

什么是Python等价物?我想不出把这个where语句翻译成pandas语法的方法.

我能想到的唯一方法是向people_usa(例如people_usa['dummy']=1)添加一个任意字段,进行左连接,然后只获取'dummy'为nan的记录,然后删除虚拟字段 - 这看起来有点复杂.

谢谢!

python dataframe pandas

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

pandas.read_csv() 可以在同一列中应用不同的日期格式!这是一个已知的错误吗?如何解决?

我已经意识到,除非显式或半显式声明日期列的格式(使用 dayfirst),否则在读取 csv 文件时pandas 可以将不同的日期格式应用于同一列!一行可能是 dd/mm/yyyy,而同一列中的另一行可能是 mm/dd/yyyy! 疯狂甚至无法描述它!这是一个已知的错误吗?

为了演示:下面的脚本创建了一个非常简单的表,其中包含从 1 月 1 日到 31 日的日期,采用 dd/mm/yyyy 格式,将其保存到 csv 文件,然后读回 csv。

然后我使用 pandas.DatetimeIndex 来提取日期。好吧,前 12 天的天数为 1(当月和日都 < 13 时),然后是 13 14 等。这到底怎么可能?

我发现解决此问题的唯一方法是明确声明日期格式或仅使用 dayfirst=True 声明日期格式。但这很痛苦,因为这意味着即使我使用有史以来格式最佳的日期导入 csv,我也必须声明日期格式!有没有更简单的方法?

Windows 10 上的 Pandas 0.23.4 和 Python 3.7.1 发生在我身上

import numpy as np
import pandas as pd
df=pd.DataFrame()
df['day'] =np.arange(1,32)
df['day']=df['day'].apply(lambda x: "{:0>2d}".format(x)  )
df['month']='01'
df['year']='2018'
df['date']=df['day']+'/'+df['month']+'/'+df['year']
df.to_csv('mydates.csv', index=False)

#same results whether you use parse_dates or not
imp = pd.read_csv('mydates.csv',parse_dates=['date']) …
Run Code Online (Sandbox Code Playgroud)

python csv date pandas

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

使用Rstudio的traceback()的错误行为:每次输出不同

我使用RStudio;我有script1导入script2与source; script2中的函数会导致错误。第一次发生时,Rstudio告诉我x行的脚本1导致y行的script2错误。如果我重新运行它,它只会告诉我有关script2中的错误。为什么?这会使调试变得比原本要痛苦得多。

更详细:

我有一个myfun.R包含此功能的文件(当然,这只是一个玩具示例):

sum_2_nums <- function(x,y) {
  out <- x + y
  return(out)
}
Run Code Online (Sandbox Code Playgroud)

然后,我使用将该函数导入另一个文件source

source("myfun.R")
mysum <- sum_2_nums(3,"hello")
Run Code Online (Sandbox Code Playgroud)

RStudio设置为debug -> on error -> error inspector。当我运行上面的代码时,我看到:

在此处输入图片说明

这告诉我myfun.R第12行中的错误是由try_traceback.R第13行引起的。

但是,如果我再次运行该脚本,则会得到:

在此处输入图片说明

即错误不再追溯到try_traceback.R。我需要traceback()在控制台中键入才能看到。为什么?第二次的不同行为确实使我感到困惑。这使调试不必要地痛苦了!有办法避免吗?

注意这个问题是不是一个重复:他们可能看起来相似,但答案给出了使用的有echo=TRUEverbose=TRUE没有解决对跟踪误差的第一.R文件我的观点。

我在这里看到了相同的问题,但仍未得到解答。

编辑

为了澄清,在回答一些评论时:

  • 就像我说的,如果我单击“调试”->“错误”->“我看到”“错误检查器”被选中。

  • 如果我options(error=function()traceback(1))在控制台中键入,屏幕上什么也不会发生,但是“错误检查器”被取消选择

  • 我的代码中没有其他内容。这是一个玩具示例,仅显示了我所显示的线条,而没有其他内容。我不知道还有什么可以澄清的-任何指导将不胜感激。

  • 我对R非常陌生。我使用Python进行数据分析,但对R感到好奇。我听说R的调试麻烦得多,并且想自己尝试一下。假设即使只追溯这样的常规错误也是有问题的,我也不会花很多时间学习R,所以我想了解我是否做错了什么,或者调试和追溯总是R中的这个

  • 当我说“运行”时,我的意思是单击RStudio中的“源”按钮(“运行”旁边的按钮

  • sessionInfo()显示:

sessionInfo() R version 3.5.3 (2019-03-11) Platform:
x86_64-w64-mingw32/x64 (64-bit) Running under: Windows >= 8 …
Run Code Online (Sandbox Code Playgroud)

r traceback rstudio

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

python pandas:将不同的聚合函数应用于不同的列

我试图理解这个简单的SQL语句的等价物是什么:

select mykey, sum(Field1) as sum_of_field1, avg(Field1) as avg_field1, min(field2) as min_field2
from df
group by mykey
Run Code Online (Sandbox Code Playgroud)

我明白我可以将字典传递给agg()函数:

  f = {'Field1':'sum',
         'Field2':['max','mean'],
         'Field3':['min','mean','count'],
         'Field4':'count'
         }

    grouped = df.groupby('mykey').agg(f)
Run Code Online (Sandbox Code Playgroud)

但是,结果列名似乎是由pandas自动选择的:('Field1','sum')等等.

有没有办法为列名传递字符串,所以字段不是('Field1','sum')我可以选择的东西,比如sum_of_field1?

谢谢.我查看了这里的文档:http://pandas.pydata.org/pandas-docs/stable/groupby.html 但是找不到答案.

python dataframe pandas

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

如何在 pandas 数据框中移动日期(添加 x 个月)?

我有一个包含日期列的数据框。

我知道如何将日期移动固定的月份数(例如,向 x 列中的所有日期添加 3 个月);但是,我无法弄清楚如何将日期移动几个月,这不是固定的,而是数据框的另一列。

有任何想法吗?

我在下面复制了一个最小的例子。我得到的错误是:

The truth value of a Series is ambiguous
Run Code Online (Sandbox Code Playgroud)

多谢!

import pandas as pd
import numpy as np
import datetime

df = pd.DataFrame()
df['year'] = np.arange(2000,2010)
df['month'] = 3

df['mydate'] = pd.to_datetime(  (df.year * 10000 + df.month * 100 +1).apply(str), format='%Y%m%d')
df['month shift'] = np.arange(0,10)

# if I want to shift mydate by 3 months, I can convert it to DatetimeIndex and use dateOffset:
df['my date shifted by 3 months'] = pd.DatetimeIndex( df['mydate'] …
Run Code Online (Sandbox Code Playgroud)

python date pandas

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

Python:numba可以在nopython模式下使用字符串数组吗?

我使用的是pandas 0.16.2,numpy 1.9.2和numba 0.20.

有没有办法让numba在nopython模式下支持字符串数组?或者,我可以以某种方式将字符串转换为numba会识别的数字吗?

我必须在字符串数组(来自pandas数据帧的列)上运行某些循环; 如果我可以使用numba,代码会快得多.

我想出了这个最小的例子来说明我的意思:

import numpy as np
import numba

x=np.array(['some','text','this','is'])

@numba.jit(nopython=True)
def numba_str(txt):
    x=0
    for i in xrange(txt.size):
        if txt[i]=='text':
            x += 1
    return x

print numba_str(x)
Run Code Online (Sandbox Code Playgroud)

我得到的错误是:

Failed at nopython (nopython frontend)
Undeclared ==([char x 4], str)
Run Code Online (Sandbox Code Playgroud)

谢谢!

python string numba

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

python pandas:如何避免链式赋值

我有一个包含两列的pandas数据框:x和value.我想找到x == 10的所有行,并且对于所有这些行,设置值= 1,000.我尝试了下面的代码,但我得到了警告

A value is trying to be set on a copy of a slice from a DataFrame.
Run Code Online (Sandbox Code Playgroud)

我知道我可以通过使用.loc或.ix避免这种情况,但我首先需要找到满足x == 10条件的所有行的位置或索引.有更直接的方式吗?

谢谢!

import numpy as np
import pandas as pd

df=pd.DataFrame()
df['x']=np.arange(10,14)
df['value']=np.arange(200,204)


print df

df[ df['x']== 10 ]['value'] = 1000 # this doesn't work

print df
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Python string.format() :将 nans 格式化为“一些文本”?

我正在使用string.format()将一些数字格式化为字符串。是否format()可以选择显示特定文本(例如“不可用”)而不是 nan?我找不到。还是我必须手动更换?

为了澄清评论中提出的观点,这里提出了一个标题相似但上下文不同的问题。我的问题是不同的,因为该问题的作者想要将 'nan' 作为输出,但由于已修复的错误而得到其他内容。

相反,我想了解 format() 是否具有将“nan”替换为其他文本的内置选项。当然,我非常感谢我可以自己手动进行替换,但只是想知道这是否是format().

python format nan string-formatting

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

pandas cut: how to convert categorical labels to strings (otherwise cannot export to Excel)?

I use pandas.cut() to discretise a continuous variable into a range, and then group by the result.

After a lot of swearing because I couldn't figure out what was wrong, I have learnt that, if I don't supply custom labels to the cut() function, but rely on the default, then the output cannot be exported to excel. If I try this:

import pandas as pd
import numpy as np    

writer = pd.ExcelWriter('test.xlsx')
wk = writer.book.add_worksheet('Test')

df= df= pd.DataFrame(np.random.randint(1,10,(10000,5)), columns=['a','b','c','d','e'])
df['range'] …
Run Code Online (Sandbox Code Playgroud)

python export-to-excel dataframe pandas

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

如何对x与y的加权平均值(由x加权)进行平滑和绘制?

我有一个带有一列权重和一个值的数据框。我需要:

  • discretise权重,并且对于权重的每个间隔,绘制的值的加权平均值,然后
  • 将相同的逻辑扩展到另一个变量:离散z,并针对每个间隔绘制值的加权平均值,并按权重加权

有找到一种简单的方法吗?我找到了一种方法,但是似乎有点麻烦:

  • 我用pandas.cut()离散化数据框
  • 进行分组并计算加权平均值
  • 绘制每个仓位的平均值与加权平均值的关系图
  • 我也尝试用样条曲线使曲线平滑,但效果不大

基本上,我正在寻找一种更好的方法来产生更平滑的曲线。

我的输出看起来像这样: 在此处输入图片说明

我的代码(带有一些随机数据)是:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
from scipy.interpolate import make_interp_spline, BSpline

n=int(1e3)
df=pd.DataFrame()
np.random.seed(10)
df['w']=np.arange(0,n)
df['v']=np.random.randn(n)
df['ranges']=pd.cut(df.w, bins=50)
df['one']=1.
def func(x, df):
    # func() gets called within a lambda function; x is the row, df is the entire table
    b1= x['one'].sum()
    b2 = x['w'].mean()
    b3 = x['v'].mean()       
    b4=( x['w'] * x['v']).sum() / x['w'].sum() if x['w'].sum() >0 else …
Run Code Online (Sandbox Code Playgroud)

python matplotlib weighted-average pandas pandas-groupby

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