对df一部分小于等于0的数据设置为nan:
df[df.iloc[:,1:]<=0] = np.nan
某列转换成数值型
df_vc1['871EH1-GA03-I1/Meas1/PRIM'] = pd.to_numeric(df_vc1['871EH1-GA03-I1/Meas1/PRIM'],errors='coerce')#'coerce'将字符串无效解析设置为nan
对 df一部分数据转成数值型:
df.iloc[:,1:] = df.iloc[:,1:].apply(pd.to_numeric,errors='coerce')
某列转为str型:
mer['reaction_smarts']=mer['reaction_smarts'].apply(str)
对Series直接使用函数生成新的列:
df['inchikey'] = df['products'].swifter.apply(smiles_to_inchi)
将指定数据列满足条件的数据设置为nan:
df.loc[df['fzI'] < 20.0,'fzI'] = np.nan
按B列分组对A列进行数据描述
df['A'].groupby(df['B']).describe()
fillna(0)无法填充整型0,这样转换下
df['Priority'].fillna(0,inplace = True)
df['Priority'] = df['Priority'].astype('int64')
删除指定列
df_vc.drop('871EH1-GA03-AP/Meas2/PRIM', axis=1,inplace=True)
转换time格式,取出部分列
df_vc['Time'] = pd.to_datetime(df_vc['Time Local'])
df_vc1 = df_vc.loc[:,['Time','871EH1-GA03-I1/Meas1/PRIM','871EH1-GA03-I2/Meas1/PRIM','871EH1-GA03-I3/Meas1/PRIM']]
四舍五入毫秒转变为秒级
df['Time'] = df['Time'].dt.round('S')
向下取整将毫秒转变为秒级
df_DGS['Time'] = df_DGS['Time'].dt.floor('S')
删除指定列重复的多余的行
df2=df.drop_duplicates('Time')
去掉指定列所有重复的行(重复的行一个也不保留)
df2=df.drop_duplicates('template_hash',keep=False)
#继续操作以下可以筛选出指定列中重复的行
df3 = df[-df['template_hash'].isin(df2['template_hash'])]
#或者使用duplicated函数更简洁
df = df.duplicated('template_hash',keep=False)
查看df数据类型及计数
df_vc1.dtypes
df_vc1.count()
算所有列平均值
df_vc1['GA03-I'] = df_vc1.mean(1)
算指定列平均值
df['fzW'] = df[['fz1','fz2','fz3','fz4']].mean(1)
df_mer1 = pd.concat([df3, df_vc1], axis=0, join='outer')#将两个df在竖直方向并集拼接
df_mer1.sort_values(by='Time',inplace=True)#按指定列排序
mapping = {
'Low': 3,
'Medium': 2,
'High': 1}
df_mer1['Priority'] = df_mer1['Priority'].map(mapping)#将字符串列转为数值型标签
df_mer1 = df_mer1.groupby('Time').mean()#以指定列分组后算均值
df_mer1.dropna(subset=['Priority'],inplace=True)删除指定列的空值行
df_mer1.to_csv('./current_voltage/not ffill/GA03-I.csv',index=False)#df转为csv文件
df_DGS.replace(0.,np.nan,inplace=True)#替换0为nan
df[['windspeed','Thr_power','DG_power','fzW','fzI','fzU']] = df[['windspeed','Thr_power','DG_power','fzW','fzI','fzU']].round(decimals=2)#保留2位小数
df['Priority'].value_counts()#指定列的取值计数
df_pdp2.fillna(method='ffill',inplace = True)#向前填充
df_pdp2 = df_pdp2.groupby('Time').mean()#按time列分组对其它列算均值,之后需要做df_mer = df_mer.reset_index()
df0 = df[df['Priority']==0]#取出指定列值为0的所有行
df0 = df0.iloc[np.random.randint(0,469318,7507)]#取出随机数指定的行
df_v = pd.read_csv(r'C:\Users\18467\Desktop\中集\中集数据\TankVolume TimeSeriesValues_Exported_20200501T000000-20200601T000000_rmOrKvEmwVElvGBhw舱室容积\TimeSeriesValues_Exported_20200501T000000-20200601T000000_rmOrKvEmwVElvGBhw.csv', na_values=' ')#读取csv数据同时将空格转为nan值
df_mer.rename(columns={'Sensor data.WindSpeed1':'WindSpeed'},inplace=True)#改名
特征分桶
df['WS_bucketized'] = pd.qcut(df['windspeed'], 2, labels=False)
df = pd.merge(df,df.groupby(['WS_bucketized'])['fzW'].mean()
.reset_index()
.rename(columns={'fzW': 'fzW_mean'})
,on='WS_bucketized'
,how='left'
)
append与concat相似
#df1与df2列名称相同
pd.concat([df1,df2])=df1.append(df2)#索引都是不重置的,但df1.append(df2,ignore_index=True)的索引是重置的,是按顺序的
取出筛选出的数据的索引
data1[data1['A'].isin(['cc'])].index#得先通过data[bool]取出指定数据再.index获取索引
pd.read_csv(index_col='A')与pd.set_index('A')结果一样
data1.groupby('A').size()结果为索引为A的series,.reset_index()之后变为dataframe,索引A变为第一列
data1['A'].values=data1['A'].to_numpy()
pd.DataFrame(data1['A'])#series变dataframe
找同一行的另一个取值
data1=pd.DataFrame({'A':['aa','aa','aa','bb','cc','aa','aa'],'B':['a','b','c','f','z','f','a']})
data1['B'][data1[data1['A'].isin(['cc'])].index].values[0]
或
data1[data1['A'].isin(['cc'])]['B'].values[0]
在原列append新的元素
a=pd.DataFrame(['CC1=CC=CC=C1','CCC1=CC=CC=C1','CC1=CC(C)=CC=C1','CC1=CC(C)=CC(C)=C1','CC1=CC=C(C)C=C1','CCC1=CC=C(CC)C=C1'],columns={'smiles'})
b=a['smiles'].values.tolist()
b.extend(['a','b'])
c=pd.DataFrame()
c['smiles']=b
取出numpy.array中的数字
np.array([2]).item()
try-except-else
若except下面是return,可不需要else。在只有try执行后才能有效执行的情况下才用else,一般情况不需要用else。
DataFrame[0:2]与DataFrame.iloc[0:2]相同,均返回一个前两行的DataFrame,但前者只能切片不能取单个样本。DataFrame.iloc[2]返回的是一个样本,一个series。
下面两行代码作用一样,都是取出A列中rt所在的索引。
mer2[mer2.loc[:,'A'].isin(['rt'])].index
mer2[mer2['A'].isin(['rt'])].index
把其中一列的值作为key,其他列同一行的值为value
ex = pd.DataFrame({'a':[1,1,3],'b':[11,11,33],'c':[111,111,333],'d':[5,6,7]})
ex2 = ex.set_index('d').T.to_dict('list')
print(ex2)
{5: [1, 11, 111], 6: [1, 11, 111], 7: [3, 33, 333]}
判断某一小数的位数
len(str(a).split(".")[1])
dict.get('t','t')返回字典中t对应的值,若字典中没有t则返回't'