小编Val*_*ess的帖子

Pandas:向dataframe添加新列,这是索引列的副本

我有一个数据帧,我想用matplotlib绘制,但索引列是时间,我无法绘制它.

这是数据帧(df3):

在此输入图像描述

但是当我尝试以下内容时:

plt.plot(df3['magnetic_mag mean'], df3['YYYY-MO-DD HH-MI-SS_SSS'], label='FDI')
Run Code Online (Sandbox Code Playgroud)

我明显得到一个错误:

KeyError: 'YYYY-MO-DD HH-MI-SS_SSS'
Run Code Online (Sandbox Code Playgroud)

所以我想要做的是在我的数据帧中添加一个新的额外列(名为'Time),它只是索引列的副本.

我该怎么做?

这是整个代码:

#Importing the csv file into df
df = pd.read_csv('university2.csv', sep=";", skiprows=1)

#Changing datetime
df['YYYY-MO-DD HH-MI-SS_SSS'] = pd.to_datetime(df['YYYY-MO-DD HH-MI-SS_SSS'], 
                                               format='%Y-%m-%d %H:%M:%S:%f')

#Set index from column
df = df.set_index('YYYY-MO-DD HH-MI-SS_SSS')

#Add Magnetic Magnitude Column
df['magnetic_mag'] = np.sqrt(df['MAGNETIC FIELD X (?T)']**2 + df['MAGNETIC FIELD Y (?T)']**2 + df['MAGNETIC FIELD Z (?T)']**2)

#Subtract Earth's Average Magnetic Field from 'magnetic_mag'
df['magnetic_mag'] = df['magnetic_mag'] - 30

#Copy interesting values
df2 = …
Run Code Online (Sandbox Code Playgroud)

python matplotlib pandas

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

Matplotlib imshow 日期轴

我有带有日期和小时的数据框,每小时(0 - 23)我都有相应日期的数据(2016-11-07 - 2016-11-27):

    2016-11-07  2016-11-08  2016-11-09  2016-11-10  2016-11-11  2016-11-12  2016-11-13  2016-11-14  2016-11-15  2016-11-16

0   0.000000    1014.947022 1013.127572 1009.481264 1012.850683 1013.877889 1011.521497 1012.648708 1010.455797 1009.721842
1   0.000000    1014.506025 1012.941925 1009.152700 1013.012786 1013.631267 1011.343978 1012.562133 1010.289586 1009.614408
2   0.000000    1014.486303 1012.504753 1009.176406 1012.993172 1013.223181 1011.321553 1012.367675 1010.254122 1009.324017
Run Code Online (Sandbox Code Playgroud)

我正在绘制数据的颜色图,如下所示:

fig, ax = plt.subplots(figsize=(40, 20))
ax.imshow(df5, origin='lower', cmap='viridis')    
plt.show()
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

如何使 x 轴刻度标签成为原始数据框的日期?我需要每天都有一个刻度线和相应的日期。对于 y 刻度线,我想在 9:00、15:00、21:00、3:00 添加刻度线,并在这些时间上有一条标记的水平线。

谢谢!

python matplotlib pandas imshow

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

imshow colormap图形和suptitle不在中心对齐

这是一个非常小的问题,但我仍然无法弄清楚。我使用 imshow 和 matplotlib 来绘制颜色图 - 但结果是图形和标题没有对齐:

在此处输入图片说明

我用于情节的代码是:

fig, ax = plt.subplots(figsize=(27, 10))

cax1 = ax.imshow(reversed_df, origin='lower', cmap='viridis', interpolation = 'nearest', aspect=0.55)

ylabels = ['0:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00']
major_ticks = np.arange(0, 24, 3)
ax.set_yticks(major_ticks)
ax.set_yticklabels(ylabels, fontsize = 15)

xlabels = ['Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec', 'Jan17']
xmajor_ticks = np.arange(0,12,1)
ax.set_xticks(xmajor_ticks)
ax.set_xticklabels(xlabels, fontsize = 15)
fig.autofmt_xdate()

fmt = '%1.2f'
cb = plt.colorbar(cax1,fraction=0.046, pad=0.04, format=fmt)
cb.update_ticks

fig.suptitle('2016 Monthly Pressure Data (no Normalization) …
Run Code Online (Sandbox Code Playgroud)

python matplotlib imshow

5
推荐指数
1
解决办法
959
查看次数

熊猫:仅从某些列创建新数据框

我有一个带测量值的csv文件,我想用小时平均值和标准偏差创建一个新的csv文件.但仅适用于某些列.

例:

csv1:

YY-MO-DD HH-MI-SS_SSS    |     Acceleration  |        Lumx     |    Pressure
2015-12-07 20:51:06:608  |        22.7       |        32.3     |     10
2015-12-07 20:51:07:609  |        22.5       |        47.7     |     15
Run Code Online (Sandbox Code Playgroud)

到csv 2(仅适用于压力和加速度:

 YY-MO-DD HH-MI-SS_SSS       | Acceleration avg  |   Pressure avg
    2015-12-07 20:00:00:000  |        22.6       |        12.5     
    2015-12-07 21:00:00:000  |        ....       |        ....    
Run Code Online (Sandbox Code Playgroud)

现在我有一个想法(感谢本网站上的人)关于如何计算平均值 - 但我在创建一个包含几列计算的新的较小数据框时遇到了麻烦.

谢谢 !!!

python csv pandas

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

DataFrame Resample (pandas) 中没有结果

我有一个如下所示的数据框 (df):

      Time          Temp
2017-01-01 00:30:00 11.1
2017-01-01 01:00:00 10.8
2017-01-01 01:30:00 10.8
2017-01-01 02:00:00 10.8
2017-01-01 02:30:00 11.1
.....             ....
Run Code Online (Sandbox Code Playgroud)

我正在尝试获取 Temp 数据的每小时平均值,我曾经使用以下代码进行操作(时间是索引):

df2 = df.resample('H').agg(['mean','std'])
Run Code Online (Sandbox Code Playgroud)

但现在我收到以下错误:

---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
<ipython-input-8-b43bf44dcae3> in <module>()
----> 1 df9 = dfroof4.resample('H').agg(['mean','std'])

D:\Anaconda3\lib\site-packages\pandas\core\resample.py in aggregate(self, arg, *args, **kwargs)
    314 
    315         self._set_binner()
--> 316         result, how = self._aggregate(arg, *args, **kwargs)
    317         if result is None:
    318             result = self._groupby_and_aggregate(arg,

D:\Anaconda3\lib\site-packages\pandas\core\base.py in _aggregate(self, arg, *args, **kwargs)
    632             return self._aggregate_multiple_funcs(arg,
    633                                                   _level=_level, …
Run Code Online (Sandbox Code Playgroud)

python pandas

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

Pandas:使用其他列的计算添加列

我有一个测量的csv:

YY-MO-DD HH-MI-SS_SSS    |        x          |          y
2015-12-07 20:51:06:608  |        2          |          4
2015-12-07 20:51:07:609  |        3          |          4
Run Code Online (Sandbox Code Playgroud)

我想添加另一列,其平方根为x ^ 2 + y ^ 2,z = sqrt(x ^ 2 + y ^ 2)

像这样:

 YY-MO-DD HH-MI-SS_SSS       |        x          |          y     |     z
    2015-12-07 20:51:06:608  |        2          |          4     |   4.472
    2015-12-07 20:51:07:609  |        3          |          4     |    5
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

谢谢 !

python pandas

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

了解 JAX 梯度函数中的 argnums 参数

我试图了解argnumsJAX 梯度函数的行为。假设我有以下函数:

def make_mse(x, t):  
  def mse(w,b): 
    return np.sum(jnp.power(x.dot(w) + b - t, 2))/2
  return mse 
Run Code Online (Sandbox Code Playgroud)

我通过以下方式获取渐变:

w_gradient, b_gradient = grad(make_mse(train_data, y), (0,1))(w,b)
Run Code Online (Sandbox Code Playgroud)

argnums= (0,1)在这种情况下,但这意味着什么呢?梯度是针对哪些变量计算的?如果我改用的话会有什么区别argnums=0?另外,我可以使用相同的函数来获取 Hessian 矩阵吗?

我查看了JAX 帮助部分,但无法弄清楚

python automatic-differentiation jax

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

禁用 imshow colorbar 的科学记数法

由于某种原因,我找不到关闭以下绘图的颜色条的科学记数法的方法:

在此输入图像描述

我尝试过使用powerlimits

ylabels = ['0:00', '03:00', '06:00', '09:00', '12:00', '15:00', '18:00', '21:00']

fig, ax = plt.subplots(figsize=(27, 7))

cax1 = ax.imshow(df7, origin='lower', cmap='viridis', interpolation='none', aspect=4)
ax.set_xticklabels(label, fontsize = 12)
plt.xticks(np.arange(len(df7.columns)))

major_ticks = np.arange(0, 24, 3)
ax.set_yticks(major_ticks)
ax.set_yticklabels(ylabels, fontsize = 12)


fig.autofmt_xdate()


cb = plt.colorbar(cax1,fraction=0.046, pad=0.04)
cb.formatter.set_powerlimits((0, 8))
cb.update_ticks

plt.tight_layout()

ax.set_aspect(0.5)
fig.suptitle('November 2016 Normalized Pressure Data $[mbar]$',fontsize=15)
fig.tight_layout(pad = 1)

plt.show()
Run Code Online (Sandbox Code Playgroud)

我见过关于格式化颜色条的类似问题,但这里的问题是如何格式化它以禁用科学记数法!

python matplotlib colorbar imshow

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

熊猫:同一小时内的平均值

我有一个看起来像这样的 csv:

YYYY-MO-DD HH-MI-SS_SSS             ATMOSPHERIC PRESSURE (hPa) mean
2/24/2016 13:00                            1011.937618
2/24/2016 14:00                            1011.721583
2/24/2016 15:00                            1011.348064
2/24/2016 16:00                            1011.30785
2/24/2016 17:00                            1011.3198
2/24/2016 18:00                            1011.403372
2/24/2016 19:00                            1011.485108
2/24/2016 20:00                            1011.270083
2/24/2016 21:00                            1010.936331
2/24/2016 22:00                            1010.920958
2/24/2016 23:00                            1010.816478
2/25/2016 00:00                            1010.899142
2/25/2016 01:00                            1010.209392
2/25/2016 02:00                            1009.700625
2/25/2016 03:00                            1009.457683
2/25/2016 04:00                            1009.268081
2/25/2016 05:00                            1009.718639
2/25/2016 06:00                            1010.745444
2/25/2016 07:00                            1011.062028
2/25/2016 08:00                            1011.168117
2/25/2016 09:00                            1010.771281
2/25/2016 10:00                            1010.138053
2/25/2016 11:00                            1009.509119
2/25/2016 12:00                            1008.703811 …
Run Code Online (Sandbox Code Playgroud)

python csv pandas

0
推荐指数
1
解决办法
4006
查看次数

在Python中的单元格之间创建x秒间隔的日期时间数组

我正在尝试使用datetime来创建一个将从以下开始的数组:

2018-7-16 9:00:00
Run Code Online (Sandbox Code Playgroud)

并且将有150秒间隔3000次,因此结果将是一个包含3000个单元格的数组,如下所示:

2018-7-16 9:00:00
2018-7-16 9:02:30
2018-7-16 9:05:00
....
Run Code Online (Sandbox Code Playgroud)

我试过了:

from datetime import datetime, timedelta

interval = 150
base = datetime(2018,7,16,9,0,0)
arr = numpy.array([base + timedelta(seconds=interval) for i in range(3000)])
Run Code Online (Sandbox Code Playgroud)

但结果是:

rray([datetime.datetime(2018, 7, 16, 9, 2, 30),
       datetime.datetime(2018, 7, 16, 9, 2, 30),
       datetime.datetime(2018, 7, 16, 9, 2, 30), ...,
       datetime.datetime(2018, 7, 16, 9, 2, 30),
       datetime.datetime(2018, 7, 16, 9, 2, 30),
       datetime.datetime(2018, 7, 16, 9, 2, 30)], dtype=object)
Run Code Online (Sandbox Code Playgroud)

任何想法或更好的方法来做到这一点?

谢谢!!

python datetime

0
推荐指数
1
解决办法
32
查看次数