数据科学:Numpy、Pandas、Matplotlib
一、Numpy
在numpy中以np.nan
表示缺失值,它是一个浮点数。
二、Pandas
1、如要选出col0在30到80之间的行中col3与col1之差为奇数的行,或者col2大于50中的行col3超过col1均值的行,可以如下写出:
c11 = df["col 0"].between(30, 80) c12 = (df["col 3"] - df["col 1"]) % 2 ==1 c21 = df["col 2"] > 50 c22 = df["col 3"] > df["col 1"].mean() df.loc[(c11 & c12) | (c21 & c22)]
2、分别统计每一列的缺失值比例和每一行的缺失值比例
df.isna().mean() # 默认mean的axis参数为0,按照行方向计算列的均值。 df.isna().mean(axis=1)
如果想要统计每列包含的缺失值个数,只需把mean替换为sum即可。
如果想知道缺失的行或列具体实哪一些,可以如下操作:
df[df.isna().sum(1) >= 2]
在pandas中,删除某些包含缺失值的行或列可以通过dropna函数来实现:
df.dropna(axis=1,thresh=90) # axis为1和0分别指删除列和行 # thresh表示非缺失值没有达到这个数量的相应维度会被删除。
3、DataFrame.plot( )函数
使用pandas.DataFrame的plot方法绘制图像会按照数据的每一列绘制一条曲线,默认按照列columns的名称在适当的位置展示图例,比matplotlib绘制节省时间,且DataFrame格式的数据更规范,方便向量化及计算。
DataFrame.plot(x=None, y=None, kind='line', ax=None, subplots=False, sharex=None, sharey=False, layout=None, figsize=None, use_index=True, title=None, grid=None, legend=True, style=None, logx=False, logy=False, loglog=False, xticks=None, yticks=None, xlim=None, ylim=None, rot=None, fontsize=None, colormap=None, position=0.5, table=False, yerr=None, xerr=None, stacked=True/False, sort_columns=False, secondary_y=False, mark_right=True, **kwds)
4、将数据写入到Excel的多个sheet
有时一个excel内会有多个sheet。但是将两组数据通过to_excel函数先后保存到一个excel内会发现只有后一组保存的数据,因为前一组的数据被后写入的数据覆盖了。
df1.to_excel('xxx.xlsx',sheet_name='df1') df2.to_excel('xxx.xlsx',sheet_name='df2')
使用pd.ExcelWriter建立一个writer,然后,将df1,df2都使用to_excel(writer, sheet名),最后一次性将这些数据保存,并关闭writer就完成了
writer = pd.ExcelWriter('xxx.xlsx') df1.to_excel(writer,sheet_name="df1") df2.to_excel(writer,sheet_name="df2") writer.save() writer.close()
这样会覆盖我们原有的excel数据,如果不想覆盖,可以:
writer = pd.ExcelWriter('保存.xlsx') # 如果不存在,会自动创建excel df = pd.read_excel("xxx.xlsx", sheet_name=xxx) ...... df_res.to_excel(writer, sheet_name=xxx, index=False)
5、找出每行或列的最大值所在的列索引或行索引:
返回一列最大值所在行的行索引df.idxmax()
,默认参数为0
若参数设置为1,则为一行最大值所在列的列索引df.idxmax(1)
(取最小值为df.idxmin()
)
三、Matplotlib
1、设置x轴为时间刻度
imoort pandas as pd import matplotlib.pyplot as plt import matplotlib.dates as mdates df = pd.read_excel("***.xlsx") # 绘制图像 fig, ax = plt.subplots() ax.plot(df['time'], df['*']) # 配置x轴时间间隔 time_format = mdates.DateFormatter('%H:%M:%S') ax.xaxis.set_major_formatter(time_format) ax.xaxis.set_major_locator(mdates.MinuteLocator(interval=240)) # 设置刻度位置 ax.set_xticks(pd.date_range(df['time'][0], df['time'][-1], freq='4h')) # 还可以使用ax.set_xticklabels()来设置刻度的标签 # 设置开始坐标 ax.set_xlim(df['time'][0], df['time'][-1]) # 旋转x轴标签 fig.autofmt_xdate() # 展示图形 plt.show()