- 1. DataFrame常用操作
- 1.1 DataFrame去除空行
- (1)对于一般空行
- (2)对于列表式(list)空行
- 1.2 数据的前期处理
- (1)DataFrame获取某一列的数据并去重
- (2)表格中填充0
- (3)删除指定行(某列包含某些特定值的行)
- (4)删除指定列
- 1.3 数据的获取及筛选
- (1)获取某一行某一列的数据值
- (2)以某一列为比较条件的所有行
- (3)按组别筛选出每一种数据
- (4)多条件筛选数据
- (5)数据的排序及分组(先排序,后分组)
- 1.4 数据的插入
- (1)数据的插入
- (2)实现数据分隔并换列插入存储
- (3)实现DataFrame的if else判断,并将生成的数据插入表格
- (4)多重条件&多where嵌套,并将生成的数据插入表格
- 1.5 数据的修改
- (1)按照某一列的值更改另一列的值
- (2)根据判断条件来更换表格中数据的值
- 1.6 数据的后期处理
- (1)实现两表的拼接
- (2)按某一字段排序
- (3)重置索引
- 2. 日期
- 2.1 计算两个日期间的总天数
- 2.2 日期的递增,类别的联合表格生成
### 删掉空行 data_use=data_use[~(data_use['elec_ap'].isnull())] ## 法2 df = df[df['A'] != 0] ## 法3 machine_name_time = 'machine_name' data.dropna(subset=[machine_name_time],inplace=True) ## 法4 ### 去空,inplace=True才会修改原表格的数据,否则并不会修改原表格的数据data_use.dropna(how='any', axis=0,inplace=True)(2)对于列表式(list)空行
### 现将表格中为 [] 的值变为NaN df['value'] = df['value'].str[0] ### 再去除有空行存在的列 df..dropna()
### 获取电器设备一栏并去重 result = data['elec_ap'].unique()(2)表格中填充0
merge_group = merge_group.fillna(0) merge_group(3)删除指定行(某列包含某些特定值的行)
##df.drop([0],axis=1) data.drop(data[data['elec_aps']=='电冰箱'].index,axis=0,inplace=True) data(4)删除指定列
df.drop(["one"],axis=1)1.3 数据的获取及筛选 (1)获取某一行某一列的数据值
for index in range(0,len(itemSet_between_more)): num = itemSet_between_more.iloc[index]['数量'] print(num) #itemSet_between_more如下图
data_A = data_use[data_use['degree']=='A'] data_A(3)按组别筛选出每一种数据
### 注意:elec_aps是一个[],elec_ap是DataFrame中的列数据
for index in range(0,len(elec_aps)):
### 获取某一行数据
data_per = data[data['elec_ap']==elec_aps[index]]
print(data_per)
(4)多条件筛选数据
keys = ['T0.00', 'T01.00', 'T02.00', 'T03.00'] data_between = data_use.loc[(data_use[keys[1]] > 1)|(data_use[keys[3]] > 1)] data_between(5)数据的排序及分组(先排序,后分组)
说明:防止分组后同样的数据顺序不一致,导致数据误差
##按日期分组获取列表
### 先以elec_ap列实现排序,放置数据乱序
item_single_list = data_use.sort_values(
'elec_ap',ascending=False
).groupby(
by='rq'
).apply(
lambda x:list(x.elec_aps)
)
1.4 数据的插入
(1)数据的插入
data.insert(loc=2,column='degree',value='A') ### 参数说明: loc:插入的位置 column:插入列的名字,多列:column=['列名_A','列名_B'] value:插入的值(value=列A,列A=[......]),多列:value=[列A,列B](2)实现数据分隔并换列插入存储
elec_aps = []
for item in data_use['elec_ap']:
#print(item.split('_')[-1])
elec_aps.append(item.split('_')[-1])
### df.replace(to_replace, value) 前面是需要替换的值,后面是替换后的值。
data_use.insert(loc=2,column='elec_aps',value=elec_aps)
data_use
data_use[item] = np.where(data_use[key_use[index]]==1,
"["+data_use['elec_aps'].map(str) + "," + str((index+1)*2-1)+"]","")
说明:
data_use[新增的列名] = np.where(原列表判断条件, 表达式1,表达式2)
根据判断条件对数据进行判断,符合则表达式1,否知则表达式2,并将该值赋给表格新增列
(4)多重条件&多where嵌套,并将生成的数据插入表格
data_use["test_time"] = np.where((data_use["elec_time_T01.00"]!="")&(data_use["elec_time_T03.00"]!=""),
data_use["elec_time_T01.00"].map(str) + "," + data_use["elec_time_T03.00"].map(str),
np.where(data_use["elec_time_T01.00"]!="",data_use["elec_time_T01.00"].map(str),data_use["elec_time_T03.00"].map(str)
)
)
1.5 数据的修改
(1)按照某一列的值更改另一列的值
### 根据data_use['elec_ap']列的值进行判断,来改变data_use['degree']的值,并把值赋给data_use['degree']列 ### data_use['degree'].mask(data_use['elec_ap'] == '湖北_樱桃_B', 'B') 并不会改变原表格数据的值 data_use['degree'] = data_use['degree'].mask(data_use['elec_ap'] == '湖北_樱桃_B', 'B') data_use['degree'] = data_use['degree'].mask(data_use['elec_ap'] == '湖北_苹果_E', 'B')(2)根据判断条件来更换表格中数据的值
keys = ['rydl', 'T0.00', 'T01.00', 'T02.00','T03.00']
### 此处阈值为1,根据阈值来实现数据的替换
for item_time in keys:
data_use.loc[data_use[item_time]>=1,item_time] = 1
data_use.loc[data_use[item_time]<1,item_time] = 0
1.6 数据的后期处理
(1)实现两表的拼接
### 注意:需要两个表的列名一致,才会进行值比较并且拼接 ### 若不一致,则会根据便利原则,将不同列之间的值进行一次拼接 merge_group = pd.merge(A_machine,my_data,how="left") merge_group ## 扩展 keys = ['elec_time_T01.00','elec_time_T03.00] #为将从表格中去除的列名 data_tt.drop(keys, axis=1).join(df_2)(2)按某一字段排序
###表示pd按照xxx这个字段排序,inplace默认为False,如果该值为False,那么原来的pd顺序没变,只是返回的是排序的
result_low.sort_values("置信度",inplace=True,ascending=False)
result_low
(3)重置索引
## 按置信度从高到低排序 ### drop=True, 删除原有索引,建立新索引, drop = False 保留原有索引,添加重置索引。 result_low.reset_index(drop=True, inplace=True) result_low2. 日期 2.1 计算两个日期间的总天数
### 计算总日期 import datetime d1 = datetime.datetime(2019,3,4) # 第一个日期 d2 = datetime.datetime(2019,11,30) # 第二个日期 interval = d2 - d1 # 两日期差距 interval.days # 具体的天数2.2 日期的递增,类别的联合表格生成
# 指定开始日期是2019/03/04,指定结束日期为2019/11/30
import datetime
date_start = datetime.date(2019,3,4)
# 指定需要加(减)的天数
delta = datetime.timedelta(days = 1)
n_days = date_start
### 生成设备类别
elec = ['A', 'B', 'C', 'D', 'E']
rqs = [] #用于记录日期
elec_aps = [] #用于记录设备
while n_days.strftime('%Y/%m/%d')!='2019/11/30':
# 每次以 前一天的日期 为基础累加一天
n_days = n_days + delta
#print(n_days.strftime('%Y/%m/%d'))
for value in elec:
rqs.append(n_days.strftime('%Y/%m/%d'))
elec_aps.append(value)
## 将rqs,elec_aps数据生成表格
A_data = pd.DataFrame({
'rq':rqs,
'elec_aps':elec_aps
})
A_data



