pandas作为python非常强大的处理数据的库文件,我对于之前用pandas处理车辆工况曲线时,用到了几条常用的命令。常用的还有Numpy和Matpotlib。
import pandas as pd #处理数据的
import numpy as np #处理数据的
import matplotlib.pyplot as plt #画图表的,而且特别好看
#表格建立与数据写入
data = pd.read_excel('C:\\Users\\M\\Desktop\\python\\计算机学院研究生.xlsx') #读取原始数据
data.to_excel('C:\\Users\\M\\Desktop\\output.xlsx') #输出数据到excel
data = pd.DataFram(colums=list('ABCD'),index=list('1234') ) #生成一个DataFrame,行是ABCD,列是1234
#数据预处理
pd.concat([list2015,list2016,list2017,list2018,list2019]) #连接成总表,同列数据将拼接,未相交部分将为空集。
a = df.drop_duplicates(subset=['某列名']) #去重,把某列中的重复数据去除(保留某列中的唯一数据)
b = pd.merge(df1, df2, on='某列名') #找行交集,合并df1,df2中,某列中,数据相同的行,其他列取并集
#↓↓↓↓查找包含‘微课评选’字符的行,并且在其‘奖项类别’列,填上‘技术’。可以使用 '|' 来进行多个条件的筛选
df.loc[df['奖项名称'].str.contains('微课评选|微课'), '奖项类别'] = '技术'
#空值操作
list2015 = list2015.dropna(axis=0, thresh=10) #删除空值大于10个的数据(行)。语法 DataFrame.dropna(axis=0, how='any', thresh=None, subset=None, inplace=False)
df_HonoraryTitle['某列名'] = df_HonoraryTitle['某列名'].fillna(value='填充的值') #按照列,空数据插值
df = df.fillna(value='无') #把df所有空值改成“无”
#数据操作
a = data['某列名'] #访问某列的所有数据
a = data.at['3行','2列'] #访问data中某一位置数据
a = data.loc['3行','2列'] #效果同上
a = data.loc['缪奇峰'] #访问缪奇峰(行)的所有数据
a = data.loc[(data['姓名'] != '缪奇峰')&(data['性别'] != '男'), '年龄'] #访问‘姓名’列中,不叫缪奇峰且性别不是男的,年龄数据
a = data.iloc[1,2] #id定位,访问1行2列的数据
a = data.sort_values(by='出生日期') #按照‘出生日期’的值进行排序
a = data[data.出生日期 > 19950101] #访问出生日期大于19950101的人
data[data.出生日期 > 19950101] ='都是我小弟' #出生日期大于19950101,值改成‘都是我小弟’
a = data.学号 #访问某一列的数据,数据类型为数组
a = data[10:45] #data的10~45行的数据
a = data.生日.max() #生日这一列的最大值,最小为min()
a = data.学号.mean()#求学号这一列的平均值
a = data.shape #表格的形状,行列数
a = data.shape[0] #表格的行数,[1]为列
#列操作
df = df[['列1','列3']] #提取多列,提取df中的,指定多列
a = data.columns.values #提取列名到a
list2018.columns = a #列名修改,把list2018的列名重命名为a[]
a = data.rename(columns={'荣誉名称':'项目'}) #列名修改,把'荣誉名称'列名改为'项目'
df['列1'] = df['列1'] + '-' + df['列2'] #列合并,把列1,列2内容合并,中间用‘-’连接
score = df_norm['某列'].str.split('/', expand=True) #列拆分,把‘某列’以‘/’为标识,拆分为两列,score为两列内容
df['新的一列'] = 0 # 添加新的一列,数值为0
df.insert(2, '分数', 0) # 在第2列处插入‘分数’一列,数值为0
df = df.drop(columns = ['新的一列']) # 删除‘新的一列’
totallist.rename(columns = {'教师姓名':'姓名'}, inplace = True) #列重命名,把‘教师姓名’改成‘姓名’
#numpy 已经使用的命令
a = np.arange(33) #生成0~33的一个数组
a = np.nan #a的值为空 NaN
#matplotlib 已经使用的命令
data = pd.read_excel('C:\\Users\\M\\Desktop\\数学建模\\运动学片段\\3低速\\final.xlsx')
plt.plot(data.speed, linewidth=2) # 这里只指定了一个列表,那么就当作是输出参数,输入参数从0开始,就会发现没有正确绘制数据
plt.title("Driving Cycle vehicle_3", fontsize=24) # 指定标题,并设置标题字体大小
plt.xlabel("Time(s)", fontsize=14) # 指定X坐标轴的标签,并设置标签字体大小
plt.ylabel("Speed(km/h)", fontsize=14) # 指定Y坐标轴的标签,并设置标签字体大小
plt.tick_params(axis='both', labelsize=14) # 参数axis值为both,代表要设置横纵的刻度标记,标记大小为14
plt.show() # 打开matplotlib查看器,并显示绘制的图形
plt.savefig('C:\\Users\\M\\Desktop\\数学建模\\运动学片段\\document1片段\\图表\\data.png')
# 进度显示小脚本
print('已完成',round(i/items_list.shape[0]*100.00,2), '%', end="\r")
# 增加一行
series = {'albumId': albumId, 'gName': gName, }
df = df.append(series, ignore_index=True)
df[['id']] = df[['id']].values.astype(str) # id数据类型改为str
# 遍历
iterrows() #: 按行遍历,将 DataFrame 的每一行迭代为 (index,Series) 对,可以通过row[name] 对元素进行访问。
itertuples() #: 按行遍历,将 DataFrame 的每一行迭代为元组,可以通过 row[name] 对元素进行访问,比 iterrows() 效率高。
iteritems() #: 按列遍历,将 DataFrame 的每一列迭代为(列名, Series)对,可以通过 row[index] 对元素进行访问。