我有一个数据帧,我想用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) 我有带有日期和小时的数据框,每小时(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 添加刻度线,并在这些时间上有一条标记的水平线。
谢谢!
这是一个非常小的问题,但我仍然无法弄清楚。我使用 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) 我有一个带测量值的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)
现在我有一个想法(感谢本网站上的人)关于如何计算平均值 - 但我在创建一个包含几列计算的新的较小数据框时遇到了麻烦.
谢谢 !!!
我有一个如下所示的数据框 (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) 我有一个测量的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)
有任何想法吗?
谢谢 !
我试图了解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 帮助部分,但无法弄清楚
由于某种原因,我找不到关闭以下绘图的颜色条的科学记数法的方法:
我尝试过使用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)
我见过关于格式化颜色条的类似问题,但这里的问题是如何格式化它以禁用科学记数法!
我有一个看起来像这样的 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) 我正在尝试使用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)
任何想法或更好的方法来做到这一点?
谢谢!!