pandas/python数据分析笔记

本文介绍了使用pandas进行数据分析的一些关键操作,包括将数据列转换为数值型和字符串型,根据条件设置数据为NaN,按列分组进行数据描述,处理数据重复行,进行数据类型转换,计算平均值,以及利用索引和操作符进行数据筛选和处理。还探讨了错误处理和数据分桶的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

对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'

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值