pandas数据处理常用命令

读取csv文件

data = pd.read_csv(source)

读取Excel文件

需要先安装xlrd:pip install xlrd

# 读取程序, sheet_name=0代表Excel文件中第1张表,依次类推
source = './数据/附件一:325个样本数据.xlsx'
data_standard = pd.read_excel(source)
data1 = pd.read_excel(source1, sheet_name = 0)
data2 = pd.read_excel(source1, sheet_name = 1)

输出为csv文件

data.to_csv('data.csv',index=None,encoding="utf8")
data.to_csv("./output/data.csv",index=None,encoding="utf_8_sig")# 如果输出乱码可以试试这个

设置显示全部列

pd.set_option('display.max_columns',None)

设置显示全部行

pd.set_option('display.max_rows', None)

设置显示最大列数为20

pd.set_option('display.max_columns',20)

取消链式赋值警告

pd.options.mode.chained_assignment = None

对index重排序

data.reset_index(drop=True, inplace=True) 

将数据类型从Object转化为正当格式

data = data.infer_objects()

行拼接DataFrame

df3 = pd.concat([df1,df2],axis=0)

列拼接DataFrame

pd.concat([df1,df2],axis=1) 

基于共同列alpha的内合并(交集)

df3 = pd.merge(df1,df2,how='inner',on='alpha')

基于共同列alpha的外合并(并集)

df5 = pd.merge(df1,df2,how='outer',on='alpha')

基于共同列alpha的左合并

df5 = pd.merge(df1,df2,how='left',on='alpha')

基于共同列alpha的右合并

df6 = pd.merge(df1,df2,how='right',on='alpha')

基于共同列alpha和beta的内合并,其余类似

df7 = pd.merge(df1,df2,on=['alpha','beta'],how='inner')

获取列名(list)

cols = list(data) # 返回一个list

获取列名(ndarray)

cols = df1.columns.values # 返回一个ndarray

修改列名(一次性全部修改)

a.columns = ['A','B','C'] #必须写明每一列,否则会报错

修改列名(可以部分修改)

a.rename(columns={'a':'A', 'b':'B'}, inplace = True)#不一定每列都改

调整新列到指定位置

cols = list(data1To4)
cols.insert(11,cols.pop(cols.index('RON_loss')))
data1To4 = data1To4.loc[:,cols]

列运算:两列运算得新列

y_test_pred['差值'] = y_test_pred['y_test'] - y_test_pred['y_test_pred']

列运算:某一列和数值运算得新列

test_data['预测-3'] = test_data['预测'] - 3

去除0值较多的列

cols = list(data_standard_285)
search_0_285 = (data_merge_285 == 0).sum(axis=0)#axis=0表示按列相加,axis=1表示按行相加,不写表示所有行列值相加
for i in search_0_285.index:
    if search_0_285[i] >= 10:
        cols.pop(cols.index(i))
data_merge_285 = data_merge_285.loc[:,cols]

用均值填充空值

for column in list(data_merge_285.columns[data_merge_285.isnull().sum() > 0]):
    a = data_merge_285[column].mean()
    data_merge_285[column].fillna(a, inplace=True)

通过.loc[]获取指定行、列的数据

获取单个数据(类型依数据本身)

格式:

# 返回值类型依数据本身
df.loc[index,column_name] 

获取单行数据(Series/DataFrame)

格式:

# 返回值为Series类型
df.loc[index] 
# 返回值为DataFrame类型
df.loc[index:index] 

获取单列数据(Series/DataFrame)

格式:

# 返回值为Series类型
df.loc[:,column_name] 
# 返回值为DataFrame类型
df.loc[:,[column_name]]

获取多行多列的数据(DataFrame)

格式:

# 获取第start_index行到end_index行,'column_name1','column_name2',...列的数据
df.loc[start_index:end_index,['column_name1','column_name2',...]] 
# 获取index1,index3,...行,'column_name1','column_name2',...列的数据
df.loc[[index1,index3,...],['column_name1','column_name2',...]]

根据列值条件获取指定数据(Series/DataFrame)

df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])
df_1 = df.loc[df['gender']=='M',:] #获取gender列值是M的全部数据
df_2 = df.loc[df['gender']=='M','name'] #获取gender列值是M,name列的数据
df_3 = df.loc[df['gender']=='M',['name']] #获取gender列值是M,name列的数据
df_4 = df.loc[df['gender']=='M',['name','age']] #获取gender列值是M,name和age列的数据
print(df_1,'\n',type(df_1),'\n',df_2,'\n',type(df_2),'\n',df_3,'\n',type(df_3),'\n',df_4,'\n',type(df_4))
     name gender  age
0    Snow      M   22
1  Tyrion      M   32 
 <class 'pandas.core.frame.DataFrame'> 
 0      Snow
1    Tyrion
Name: name, dtype: object 
 <class 'pandas.core.series.Series'> 
      name
0    Snow
1  Tyrion 
 <class 'pandas.core.frame.DataFrame'> 
      name  age
0    Snow   22
1  Tyrion   32 
 <class 'pandas.core.frame.DataFrame'>

通过.iloc[]用数字定位获取指定行、列的数据

在column_name特别长或者index是时间序列等各种不方便输入的情况下,可以用iloc[row_index, column_index],它完全用数字来定位。

获取单个数据(类型依数据本身)

格式:

df.iloc[indexX,indexY] 

获取单行数据(Series/DataFrame)

格式:

# 返回值为Series类型
df.iloc[index] 
# 返回值为DataFrame类型
df.iloc[index:index+1] 

获取单列数据(Series/DataFrame)

格式:

# 返回值为Series类型
df.iloc[:,index] 
# 返回值为DataFrame类型
df.iloc[:,index:index+1] 

获取多行多列的数据(DataFrame)

格式:

# 获取第start_index行到end_index-1行,index1,index2,...列的数据
df.iloc[start_index:end_index,[index1,index2,...]] 
# 获取index1,index2,...行,第start_index行到end_index-1列的数据
df.iloc[[index1,index2,...],start_index:end_index]
df = pd.DataFrame([['Snow','M',22],['Tyrion','M',32],['Sansa','F',18],['Arya','F',14]], columns=['name','gender','age'])
df_1 = df.iloc[[1, 3], 0:1]  # 获取第1行和第3行,第0列的数据
df_2 = df.iloc[1:3, [1, 2]]  # 获取第1行到第2行,第1列和第2列的数据
print(df_1,'\n',type(df_1),'\n',df_2,'\n',type(df_2))

根据列值条件设置列值(DataFrame)

# 将data表中‘event_name'=‘ta_app_install'的行的‘event_time'值设置为空
data.loc[data['event_name'] == 'ta_app_install', 'event_time'] = None

基于某列值排序

# 基于'user_id'和'first_open_time'升序排序
data = data.sort_values(by=['user_id','first_open_time'])

基于某列删除重复行,保留第一次出现的行

# 按user_id删除重复行,保留第一次出现的行
data = data.drop_duplicates("user_id", keep='first')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hellosc01

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值