小编JC_*_*_CL的帖子

与熊猫的互相关(时滞相关)?

我有各种各样的时间序列,我想要相互关联 - 或者更确切地说,相互关联 - 以找出相关因子最大的时滞.

我找到了各种 问题和答案/链接,讨论如何用numpy来做,但那些意味着我必须把我的数据帧变成numpy数组.由于我的时间序列经常涵盖不同的时期,我担心我会陷入混乱.

编辑

我遇到的所有numpy/scipy方法的问题是,他们似乎缺乏对数据时间序列性质的认识.当我将1940年开始的时间序列与1970年开始的时间序列相关联时,熊猫corr知道这一点,而np.correlate只产生1020个条目(长序列的长度),这个数组充满了nan.

关于这个主题的各种Q表明应该有一种方法来解决不同长度的问题,但到目前为止,我没有看到如何在特定时间段内使用它的迹象.我只需要以1为增量移动12个月,以便在一年内查看最大相关时间.

EDIT2

一些最小样本数据:

import pandas as pd
import numpy as np
dfdates1 = pd.date_range('01/01/1980', '01/01/2000', freq = 'MS')
dfdata1 = (np.random.random_integers(-30,30,(len(dfdates1)))/10.0) #My real data is from measurements, but random between -3 and 3 is fitting
df1 = pd.DataFrame(dfdata1, index = dfdates1)
dfdates2 = pd.date_range('03/01/1990', '02/01/2013', freq = 'MS')
dfdata2 = (np.random.random_integers(-30,30,(len(dfdates2)))/10.0)
df2 = pd.DataFrame(dfdata2, index = dfdates2)
Run Code Online (Sandbox Code Playgroud)

由于各种处理步骤,这些dfs最终变为df,从1940年到2015年被索引.这应该重现:

bigdates = pd.date_range('01/01/1940', '01/01/2015', freq = 'MS') …
Run Code Online (Sandbox Code Playgroud)

python numpy correlation pandas cross-correlation

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

pylint“太多局部变量”试图告诉我什么,我该怎么办?

我正在开发一个 python 函数,它读取带有各种测量数据的 Excel 或 CSV 文件,并输出一个字典,其中包含带有元数据的字符串和带有数据的 pandas 数据框。

def reader(file):
"""
blablaba
"""
#500 lines of code
output = {'Error': Errorflag, 'Name': Name, 'Location': Location,
          # 20 more variables
          'Lat': Lat, 'Lon': Lon, 'Number': Number, 'data': data}    
return output
Run Code Online (Sandbox Code Playgroud)

整个事情运作良好,但 pylint 告诉我Too many local variables (120/15)pylint(too-many-locals。所以我显然违反了“良好”的编码风格,但我想知道这个要求从何而来以及我能做些什么。

pylint 文档只是有用地指出“太多局部变量(%s/%s)当函数或方法有太多局部变量时使用。这个网站更有帮助,告诉我我的函数可能太复杂并且我应考虑使用单独的函数。

我当然可以这样做,但这要么意味着变成reader多个函数(location_metadatareader,,,,,type_metadatareader... ),这将使使用和导入它变得很糟糕,或者我可以将函数中的一堆东西变成函数本身,例如的errorfinderdatareader

elevation = elev.replace(",", ".")
elevStart = elevation.find(';')+1
elevEnd = elevation.find('\n')
elevation = elevString1[elevStart:elevEnd]
elev …
Run Code Online (Sandbox Code Playgroud)

python pylint

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

如何获取整个数据框而不是列的平均值?

如何获取 pandas 数据框中所有值(NaN 除外)的平均值?

pd.DataFrame.mean()只给出每列(或行,当设置时)的平均值axis=1,但我想要整个事物的平均值。这df.mean().mean()并不是最明智的选择(见下文)。

请注意,在我的具体实际案例中,数据帧具有很大的多重索引,这使事情变得更加复杂。对于这并不重要的情况,人们可能会认为@EdChum 的答案更直接,在某些情况下这可能比更快的解决方案更可取。

示例代码

data1 = np.arange(16).reshape(4, 4)
df = pd.DataFrame(data=data1)

df.mean()
0    9.0
1    7.0
2    8.0
3    9.0
dtype: float64

df.mean().mean()
7.5

np.arange(16).mean()
7.5
Run Code Online (Sandbox Code Playgroud)

有效,但如果我屏蔽 df 的一部分(实际上,它是一个数百行/列的相关矩阵,其本质上有一半填充了冗余数据),它会变得有趣:

triang = np.triu_indices(4)
data2 = np.arange(4.,20.).reshape(4, 4)
data2[triang]=np.nan
df2 = pd.DataFrame(data=data2)

df2.mean().mean()
15.0
Run Code Online (Sandbox Code Playgroud)

但是(8. + 12. + 13. + 16. + 17. + 18.)/614.

除了编写某种手动执行上述操作的循环之外,如何才能最好地获得“真实”的意思?

python mean dataframe pandas

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

出现 104“连接被对等方重置”错误的一般规则是什么?

关于网站何时发送 TCP 重置、触发Connection reset by peer

\n\n

喜欢

\n\n
    \n
  • 打开的连接太多
  • \n
  • 带宽使用率过高
  • \n
  • 连接时间过长
  • \n
  • \xe2\x80\xa6?
  • \n
\n\n

我很确定没有法律管辖这一点,并且不同的网站/网络开发人员有不同的品味,但如果有一些通用规则集(来自有关该主题的网站或教科书或您所学的内容)我会很感兴趣在学校/工作中),这些都是大多数人遵循的。

\n\n

当然,我问的原因是我想避免被阻止\xe2\x80\xa6

\n\n

我正在下载一些免费提供的政府数据,但缺少 API 或其他东西,因此获取它的两种官方方法是在某些网络 GIS 中点击几千次,或者沿着卡夫卡式的解释路径不同级别的职员了解数据库、csv 文件、zip 文件的概念,并且您不能(也不需要,如果他们只是做了您试图解释的事情)只需开车去他们的机构一个“巨型”硬盘,所以我试图为每个参与的人采取最节省资源的方式\xe2\x80\xa6

\n

tcp http

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

用熊猫识别连续的NaN

我正在阅读一堆CSV文件(水位随时间变化的测量数据),对它们进行各种分析和可视化.

由于我无法控制的各种原因,这些时间序列通常会丢失数据,所以我做了两件事:

我总计算他们

Rlength=len(RainD)   #counts everything, including NaN
Rcount=RainD.count() #counts only valid numbers
NaN_Number=Rlength-Rcount
Run Code Online (Sandbox Code Playgroud)

如果我有比特定阈值更多的缺失数据,则丢弃数据集:

Percent_Data=Rlength/100
Five_Percent=Percent_Data*5
if NaN_Number > Five_Percent:
    ...
Run Code Online (Sandbox Code Playgroud)

如果NaN的数量足够小,我想填补空白

RainD.level=RainD.level.fillna(method='pad',limit=2)
Run Code Online (Sandbox Code Playgroud)

现在问题是:它的月度数据,所以如果我有超过2个连续NaN,我也想丢弃数据,因为这意味着我"猜测"整个赛季,甚至更多.

对文件fillna并没有真正提比我更连续NaN的规定时有发生的事情limit=2,但是当我看到RainD.describe()之前和之后...fillna...,它与基本CSV比较,其明确表示,它填补了前2 NaN的,然后离开休息,而不是错误.

所以,长话短说:

如何用熊猫识别一些连续的NaN,没有一些复杂和耗时的非熊猫循环?

python nan pandas

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

为列提供多个索引/标头

我正在使用基本上是时间序列的pandas数据帧,如下所示:

             level
Date              
1976-01-01  409.67
1976-02-01  409.58
1976-03-01  409.66
…
Run Code Online (Sandbox Code Playgroud)

我想要的是,level列的多个索引/标题,如下所示:

           Station1                   #Name of the datasource
           43.1977317,-4.6473648,5    #Lat/Lon of the source
           Precip                     #Type of data
Date              
1976-01-01  409.67
1976-02-01  409.58
1976-03-01  409.66
…
Run Code Online (Sandbox Code Playgroud)

所以基本上我正在寻找类似的东西Mydata.columns.level1 = ['Station1'],Mydata.columns.level2 = [Lat,Lon],Mydata.columns.level3 = ['Precip'].

原因是单个位置可以有多个数据集,并且我希望能够从后续合并的大数据帧中从一个位置选择所有数据,或者从所有位置选择特定类型的所有数据.

我可以从pandas文档中设置一个示例数据框,并测试我的选择,但是对于我的实际数据,我需要一种不同的方式来设置索引,如示例中所示.

例:

建立了一个小型数据帧

header = [np.array(['location','location','location','location2','location2','location2']), 
np.array(['S1','S2','S3','S1','S2','S3'])] 
df = pd.DataFrame(np.random.randn(5, 6), index=['a','b','c','d','e'], columns = header )   

df
    location                      location2                    
         S1        S2        S3         S1        S2        S3
a -1.469932 -1.544511 -1.373463  -0.317262  0.024832 -0.641000
b …
Run Code Online (Sandbox Code Playgroud)

python multi-index pandas

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

什么是[Sci/Num] Python相当于Matlabs"norminv"(正常逆累积分布函数)

norminv在Matlab中搜索python等效的函数.

或者换句话说(来自上面的描述):我在python中搜索"正常逆累积分布函数",或者可能在scipy的统计部分中搜索(或者可能是numpy?)

我猜它存在于scipy中,但可能是在matlab中的另一个名称,或者在matlabs帮助页面中.但是我不确定这个函数的其他名称或确切的工作方式,所以我很难找到它.不幸的是,它不仅仅是"反向正常积极......"而不是"正常反积累......"

python statistics matlab numpy scipy

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

如何让ipython了解对自写模块所做的更改?

尝试自写模块时,最初几次可能会以错误结束.

但是在修复这些错误时,ipython似乎并没有注意到这一点.

是否有ipython命令重新加载新模块?'清除'并不能解决问题.到目前为止,唯一有效的方法是"退出"并开始新的会话.但这也意味着重做迄今为止所做的一切.

或者我是否需要在模块运行后向模块中添加一些内部变量?

例:

from mymodule import readCSVts
import pandas as pd
data = readCSVts('file.csv')

TypeError                                 Traceback (most recent call last)
<ipython-input-158-8f82f1a78260> in <module>()
----> 1 data = readCSVts('file.csv')

/home/me/path/to/mymodule.py in readCSVts(filename)
    194                 Cons_NaNs=hydroTS[(hydroTS.level.isnull())&(hydroTS.level.shift().isnull())&(hydroTS.level.shift(periods=2).isnull())]
    195                 #This is a pandas dataframe containing all rows with NaN
    196                 Cons_NaNs_count = len(Cons_NaNs)
    197                 Cons_NaNs_str = str(Cons_NaNs_count)
    198                 Cons_NaN_Name_joiner = [current_csv,';',Cons_NaNs]
--> 199                 Cons_NaN_Name_str = ''.join(Cons_NaN_Name_joiner)

TypeError: sequence item 2: expected string, DataFrame found
Run Code Online (Sandbox Code Playgroud)

好的,这很容易.我在第198行写了一个拼写错误,并写了Cons_NaNs而不是Cons_NaNs_str,因此我得到了尝试使用字符串连接数据帧的明显错误.

但在将其修复到mymodule.py文件后,我得到以下(缩短)错误:

    197 …
Run Code Online (Sandbox Code Playgroud)

python ipython

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

为什么 pandas.xs 不能从一层选择多个键?

我有一个大型数据框,其中包含大约 10 个级别的多索引和时间序列数据,如下所示:

country     Elbonia       ... Elbonia        ...
state       Upper Elbonia ... Lower Elbnonia ...
city        Krschmsh      ... Chkchk         ...
elevation   1400          ... 800            ...
...
importance  high          ... mid            ...
visit       yes           ... maybe          ...
Date
1930-01-01  Nan           ... 500            ...
1930-02-01  358,2         ... 501            ...
Run Code Online (Sandbox Code Playgroud)

我可以使用 来选择非常简单且可读的内容.xs,例如Chkchk = Elbonia.xs('Chkchk', level='city', axis=1, drop_level=False)并拥有一个新的、更小的数据框。到目前为止,一切都很好。如果我需要多个城市,我可以获取上埃尔伯尼亚的整个州Elbonia.xs('Upper Elbonia', level='state'...或所有具有high,依此类推。

但假设我需要一个包含Krschmsh上埃尔博尼亚和Chkchk下埃尔博尼亚的数据框。xs 文档说“xs 还允许使用多个键进行选择”,但显然,多个必须 同时应用于键和级别。明显的Elbonia.xs(('Krschmsh', 'Chkchk'), level='city', axis=1, …

python pandas

5
推荐指数
0
解决办法
464
查看次数

为什么我不能将 x 和 y 标签设置为 pd.plot() 的参数,而我可以轻松设置类似的内容,例如标题?

我正在使用 pandas 打印各种内容,使用内置plot命令,例如ipython 中的my_dataframe.plot()后跟plt.show()

\n\n

现在,这是一种非常简单方便的可视化方式,并且考虑到我无论如何都会对 SVG 文件进行后处理,所以我不太关心绘图的细节。

\n\n

然而,我需要一个标题、一个图例以及图上 x 和 y 轴的标签,既可以提醒自己什么是什么,也可以快速向其他人发送一些内容,而不必添加“哦,顺便说一句,这次 x 轴是小时,y 一如既往是米,但蓝色现在是电子邮件的示例 B\xe2\x80\xa6" 行。

\n\n

我想出了如何以简单的方式做到这一点(见下文),并且我也知道我可以用它做的各种强大的事情ax,但我花了一段时间才找到我的“简单”解决方案,并且我\我远离是ax因为有太多我既不需要也不理解的事情正在发生。

\n\n

我确实理解为什么人们想要 的所有强大选项ax,但我不明白为什么 pandas 绘图功能中不包含这样一个简单的选项。而且看来我并不是唯一一个这样的人。例如,用户 Chrispy 发布了这条评价很高的评论:

\n\n
\n

是否有特定原因导致 x 和 y 标签无法添加为参数pd.plot()pd.plot()鉴于over的额外简洁性,plt.plot()使其更加简洁而不是必须调用似乎是有意义的ax.set_ylabel()

\n
\n\n

关于这个问题的答案,但没有得到进一步的评论。因此我公然窃取这个问题。

\n\n

为什么plt.plot()默认情况下包含图例,并且还可以轻松地让我添加标题 ( my_df.plot(title = \'check out my cool plot\')),但逻辑下一步 ( my_df.plot(ylabel = \'size in meters\')) 结果却是TypeError: …

python plot matplotlib pandas

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