pyodide
网页版的jupyter用的是pyodide。直接pip install openpyxl 会出错。必须这样:
import piplite
await piplite.install(['openpyxl', 'matplotlib'])
筛选
data23 = data.loc[data['班级'] == '1班']
datetime64转换为 timedelta
data23['用时'] = pd.to_timedelta(data23['用时'].astype(str))
为timedelta绘制直方图
要先转换为timedelta64[h]类型。h是小时,可以改成m分钟,s秒钟,以及ns等等。
data23.groupby('学号')['用时'].sum().astype('timedelta64[h]').plot.hist()
参考文献
[1]绘制timedelta
[2]日期转为时间delta
第二部分
两个条件的AND
原来条件自身要加括号,然后再用 & 连接。
df1 = df[(df.a != -1) & (df.b != -1)]
COUNT(DISTINCT aaaa)
用的是 .nunique() 方法
table.groupby('YEARMONTH').CLIENTCODE.nunique()
多级索引 MultiIndex
如果“行标签”(我用的是excel数据透视表的术语)是多级的。用tuple元组方式引用它。
df.loc[("bar", "two")]
条件筛选,然后设置某列为1个值
A列是条件用到的列,B是要设置值为np.nan的列
df.A==0 完成对行的筛选,'B'完成对要修改的列的筛选。仍然满足 .loc[行, 列] 这个顺序。
df.loc[df.A==0, 'B'] = np.nan
对序列的每个元素做类似 x = max(x, 150)
max只能用在标量、不能用在序列。需要用 .map 方法。
maxval = 202
tmp = pscj.map(lambda x: min(x, maxval))/maxval*100
时间段(timedelta)对象如何取其小时数?
从pandas版本1到版本2有一个变化
data23.groupby('学号')['用时'].sum().astype('timedelta64[ns]').dt.components
hours = data23.groupby('学号')['用时'].sum().astype('timedelta64[ns]').dt.seconds/3600
hours.hist()
网友评论