小编And*_*cio的帖子

合并具有多索引的两个数据帧

我已经看过几个关于这个的帖子,但我无法理解merge,join和concat如何解决这个问题.如何合并两个数据帧以查找匹配的索引?

在:

import pandas as pd
import numpy as np
row_x1 = ['a1','b1','c1']
row_x2 = ['a2','b2','c2']
row_x3 = ['a3','b3','c3']
row_x4 = ['a4','b4','c4']
index_arrays = [np.array(['first', 'first', 'second', 'second']), np.array(['one','two','one','two'])]
df1 = pd.DataFrame([row_x1,row_x2,row_x3,row_x4], columns=list('ABC'), index=index_arrays)
print(df1)
Run Code Online (Sandbox Code Playgroud)

出:

             A   B   C
first  one  a1  b1  c1
       two  a2  b2  c2
second one  a3  b3  c3
       two  a4  b4  c4
Run Code Online (Sandbox Code Playgroud)

在:

row_y1 = ['d1','e1','f1']
row_y2 = ['d2','e2','f2']
df2 = pd.DataFrame([row_y1,row_y2], columns=list('DEF'), index=['first','second'])
print(df2)
Run Code Online (Sandbox Code Playgroud)

         D   E   F
first   d1  e1  f1
second  d2 …
Run Code Online (Sandbox Code Playgroud)

python merge concat multi-index pandas

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

如何使用statsmodels获得多元线性回归的标准化(Beta)系数

.summary()使用 pandas statsmodels的函数时,OLS 回归结果包括以下字段。

coef    std err          t      P>|t|      [0.025      0.975]
Run Code Online (Sandbox Code Playgroud)

如何获得标准化系数(不包括截距),类似于 SPSS 中可实现的?

python regression pandas statsmodels coefficients

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

使用resample或groupby - pandas计算时间序列的百分位数/分位数

我有一个小时价值的时间序列,我试图每周/每月得出一些基本的统计数据.

如果我们使用以下抽象数据框,则每列都是时间序列:

rng = pd.date_range('1/1/2016', periods=2400, freq='H')
df = pd.DataFrame(np.random.randn(len(rng), 4), columns=list('ABCD'), index=rng)
Run Code Online (Sandbox Code Playgroud)

print df[:5] 收益:

                            A         B         C         D
2016-01-01 00:00:00  1.521581  0.102335  0.796271  0.317046
2016-01-01 01:00:00 -0.369221 -0.179821 -1.340149 -0.347298
2016-01-01 02:00:00  0.750247  0.698579  0.440716  0.362159
2016-01-01 03:00:00 -0.465073  1.783315  1.165954  0.142973
2016-01-01 04:00:00  1.995332  1.230331 -0.135243  1.189431
Run Code Online (Sandbox Code Playgroud)

我可以打电话:

r = df.resample('W-MON')
Run Code Online (Sandbox Code Playgroud)

然后用:r.min(),r.mean(),r.max(),这些都很好地工作.例如print r.min()[:5]返回:

                   A         B         C         D
2016-01-04 -2.676778 -2.450659 -2.401721 -3.209390
2016-01-11 -2.710066 -2.372032 -2.864887 -2.387026
2016-01-18 -2.984805 …
Run Code Online (Sandbox Code Playgroud)

python group-by resampling quantile pandas

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

使用包含多索引的时间序列重新采样pandas数据帧

从创建似乎与此问题重复的内容道歉.我的数据框形状或多或少类似于下面的数据框:

df_lenght = 240
df = pd.DataFrame(np.random.randn(df_lenght,2), columns=['a','b'] )
df['datetime'] = pd.date_range('23/06/2017', periods=df_lenght, freq='H')

unique_jobs = ['job1','job2','job3',]
job_id = [unique_jobs for i in range (1, int((df_lenght/len(unique_jobs))+1) ,1) ]
df['job_id'] = sorted( [val for sublist in job_id for val in sublist] )

df.set_index(['job_id','datetime'], append=True, inplace=True)
Run Code Online (Sandbox Code Playgroud)

print(df[:5]) 收益:

                                     a         b
  job_id datetime                               
0 job1   2017-06-23 00:00:00 -0.067011 -0.516382
1 job1   2017-06-23 01:00:00 -0.174199  0.068693
2 job1   2017-06-23 02:00:00 -1.227568 -0.103878
3 job1   2017-06-23 03:00:00 -0.847565 -0.345161
4 job1   2017-06-23 04:00:00 …
Run Code Online (Sandbox Code Playgroud)

python grouping multi-index pandas

5
推荐指数
2
解决办法
2313
查看次数

如何根据索引列执行pandas drop_duplicates

当尝试根据日期时间索引的值对时间序列执行删除重复时,我正在用头撞墙。

我的功能如下:

def csv_import_merge_T(f):
    dfsT = [pd.read_csv(fp,  index_col=[0], parse_dates=[0], dayfirst=True, names=['datetime','temp','rh'], header=0) for fp in files] 
    dfT = pd.concat(dfsT)
    #print dfT.head(); print dfT.index; print dfT.dtypes
    dfT.drop_duplicates(subset=index, inplace=True)
    dfT.resample('H').bfill()
    return dfT
Run Code Online (Sandbox Code Playgroud)

其调用者:

inputcsvT = ['./input_csv/A08_KI_T*.csv']
for csvnameT in inputcsvT:
    files = glob.glob(csvnameT)
    print ('___'); print (files)
    t = csv_import_merge_T(files)
    print csvT
Run Code Online (Sandbox Code Playgroud)

我收到错误

NameError: global name 'index' is not defined
Run Code Online (Sandbox Code Playgroud)

怎么了?

更新: 当 csv 输入文件(要连接)重叠时,似乎会出现此问题。

inputcsvT = ['./input_csv/A08_KI_T*.csv']获取文件

A08_KI_T5
28/05/2015 17:00,22.973,24.021
...
08/10/2015 13:30,24.368,45.974

A08_KI_T6
08/10/2015 14:00,24.779,41.526
...
10/02/2016 17:00,22.326,41.83

并且它运行正确,而: …

datetime time-series duplicates pandas

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

TypeError:无法将序列乘以'float'类型的非整数(python 2.7)

我有一个dataframe t_unit,这是一个pd.read_csv()函数的结果。

datetime    B18_LR_T    B18_B1_T
24/03/2016 09:00    21.274  21.179
24/03/2016 10:00    19.987  19.868
24/03/2016 11:00    21.632  21.417
24/03/2016 12:00    26.285  24.779
24/03/2016 13:00    26.897  24.779
Run Code Online (Sandbox Code Playgroud)

我正在重新采样数据帧以使用代码计算第5个和第5个百分点:

keys_actual = list(t_unit.columns.values)

for key in keys_actual:
    ts_wk = t_unit[key].resample('W-MON')
    ts_wk_05p = ts_wk.apply(lambda x: x.quantile(0.05)).round(decimals=1).rename(key+'_05p', inplace=True)
    ts_wk_95p = ts_wk.apply(lambda x: x.quantile(0.95)).round(decimals=1).rename(key+'_95p', inplace=True) 
Run Code Online (Sandbox Code Playgroud)

一切正常,但是当我通过的方式向数据框添加一列时pd.concat

datetime    B18_LR_T    B18_B1_T    ext_T
24/03/2016 09:00    21.274  21.179  6.9
24/03/2016 10:00    19.987  19.868  7.5
24/03/2016 11:00    21.632  21.417  9.1
24/03/2016 12:00    26.285  24.779  9.9
24/03/2016 13:00 …
Run Code Online (Sandbox Code Playgroud)

python time-series resampling quantile pandas

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

解析文本文件python并转换为pandas数据帧

我试图解析一个文本文件,将其转换为pandas数据帧.该文件(包括空行):

HEADING1
value 1

HEADING2
value 2

HEADING1,
value 11

HEADING2
value 12
Run Code Online (Sandbox Code Playgroud)

应转换为dataframe:

HEADING1, HEADING2
value 1, value 2
value 11, value 12
Run Code Online (Sandbox Code Playgroud)

我试过以下代码.但是,我不确定使用converters可行吗?

df = pd.read_table(textfile, header=None, skip_blank_lines=True, delimiter='\n',
                   # converters= 'what should I use?',
                   names= 'HEADING1, HEADING2'.split() )
Run Code Online (Sandbox Code Playgroud)

python parsing converters pandas

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

如何从导入的 csv 文件中索引日期时间列 - pandas

我正在尝试合并和附加不同的时间序列,从 csv 文件导入它们。我尝试过以下基本代码:

import pandas as pd
import numpy as np
import glob
import csv
import os

path = r'./A08_csv'     # use your path
#all_files = glob.glob(os.path.join(path, "A08_B1_T5.csv"))

df5 = pd.read_csv('./A08_csv/A08_B1_T5.csv', parse_dates={'Date Time'})
df6 = pd.read_csv('./A08_csv/A08_B1_T6.csv', parse_dates={'Date Time'})

print len(df5)
print len(df6)

df = pd.concat([df5],[df6], join='outer')
print len(df)
Run Code Online (Sandbox Code Playgroud)

结果是:

12755 (df5)
24770 (df6)
12755 (df)
Run Code Online (Sandbox Code Playgroud)

df 不应该与两个文件中最长的一个一样长吗(就 ['Date Time'] 列上的值而言,它们有很多共同的行)?

我尝试根据日期时间对数据进行索引,添加此行:

#df5.set_index(pd.DatetimeIndex(df5['Date Time']))
Run Code Online (Sandbox Code Playgroud)

但是我收到了错误:

KeyError: 'Date Time'
Run Code Online (Sandbox Code Playgroud)

关于为什么会发生这种情况有任何线索吗?

csv indexing datetime concatenation pandas

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

用函数生成的图形填充 matplotlib 子图

我找到并改编了以下代码片段,用于生成线性回归的诊断图。这是目前使用以下功能完成的:

def residual_plot(some_values):
    plot_lm_1 = plt.figure(1)    
    plot_lm_1 = sns.residplot()
    plot_lm_1.axes[0].set_title('title')
    plot_lm_1.axes[0].set_xlabel('label')
    plot_lm_1.axes[0].set_ylabel('label')
    plt.show()


def qq_plot(residuals):
    QQ = ProbPlot(residuals)
    plot_lm_2 = QQ.qqplot()    
    plot_lm_2.axes[0].set_title('title')
    plot_lm_2.axes[0].set_xlabel('label')
    plot_lm_2.axes[0].set_ylabel('label')
    plt.show()
Run Code Online (Sandbox Code Playgroud)

用类似的东西调用:

plot1 = residual_plot(value_set1)
plot2 = qq_plot(value_set1)
plot3 = residual_plot(value_set2)
plot4 = qq_plot(value_set2)
Run Code Online (Sandbox Code Playgroud)

如何创建subplots以便将这 4 个图显示在 2x2 网格中?
我试过使用:

fig, axes = plt.subplots(2,2)
    axes[0,0].plot1
    axes[0,1].plot2
    axes[1,0].plot3
    axes[1,1].plot4
    plt.show()
Run Code Online (Sandbox Code Playgroud)

但收到错误:

AttributeError: 'AxesSubplot' object has no attribute 'plot1'
Run Code Online (Sandbox Code Playgroud)

我应该从函数内部还是其他地方设置轴属性?

python matplotlib subplot multiple-axes

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