Pandas 使用方法

wangchunlin 2022-10-11 128 10/11

Pandas实际使用时的问题,主要在于需求较细,不好搜索,东西多,不好记忆,而且同一种功能一般往往又伴随着多种写法,有点混乱,故此整理。

1、打开和保存文件,创建新的pd对象

df1 = pd.read_excel("s0.xlsx")
df = pd.read_csv("")
df_res = pd.DataFrame()
#保存,这里替换了序号后没法保存,原因未知
df_res.sort_values(by=["寝室楼", "寝室号"],inplace=False).to_excel(excel_writer='test.xlsx')

df_result.sort_values("Subject").to_csv("ADNI3_result_add_age.csv", index=None)

2、 逐行读取,新增一行

for loc_num in range(df1.shape[0]):
#目前新增一行的方式,我使用的是强行加
new_row = df_res.shape[0]+1
df_res.loc[new_row, r'寝室楼'] = apar_num
df_res.loc[new_row, r'寝室号'] = house_num
df_res.loc[new_row, r'人数'] = 1
df_res.loc[new_row, r'所属学院'] = college
df_res.loc[new_row, r'学生姓名'] = sdt_name
df_res.loc[new_row, r'详细学院信息'] = college

3、 判断是否存在一个或多个特定列值的行,匹配条件的行号获取

# 为True表示存在
if(((df_res[r'寝室楼']==apar_num) & (df_res[r'寝室号']==house_num)).any()):
# 获取该行行号为,这是一个list,获取行号的方法为:.index.tolist()
index_list = df_res[(df_res[r'寝室楼']==apar_num) & (df_res[r'寝室号']==house_num)].index.tolist()
其实这里用到了bool索引
(df_res[r'寝室楼']==apar_num) & (df_res[r'寝室号']==house_num)
返回的只是一列bool值,作为参数给df[]后即可获得对应的行
>>> df.A>0#布尔索引,.A是另外一种写法,等价于df[r'A'],但是中文这样应该用不起
0    False
1     True
2     True
3    False
Name: A, dtype: bool
==判断相等(可以用于字符串,int是否需要转格式未知)
.isin(list_name)可以判断该行的值是否在list_name数组中,若在返回true,同样返回如上bool索引
#也有df.isin({'D':[0,3],'E':['a','d']})的写法,但是其他为指明的列最后返回的bool全为false,有多少列就返回多少列,不会像上面只返回一列,故不好选出特定行,所以多个条件同是满足还是用上面&的方式
df['Acq Date'].str.startswith(month_new) 判断是否值以moth_new开始
.endswith()
# 取反
df = df_new[~((df_new["Axi"].isin([0])) & (df_new["Sag"].isin([0])) & (df_new["Cor"].isin([0])))]
# 一次简单的筛选
df = pd.read_csv("OASIS3_MR.csv")
df1 = df[~(df['MR_ID'].isin(dbtype_list))].reset_index(drop=True)
df1.sort_values("MR_ID").to_csv("OASIS3_MR1.csv", index=None)
# 又一次
df = pd.read_csv("ADNI3.csv")
df.drop_duplicates("Subject").loc[:, ["Subject","Sex", "Group"]].reset_index(drop=True).to_csv("ADNI3_2.csv")

#求平均值
scores = df02['得分'].mean()

# 当获取该行号后,对该行操作,比如控制这行人数的数值,这里在上面加1
df_res.loc[index_list[0],r'人数'] = df_res.loc[index_list[0],r'人数'] + 1
df_result.at[i, "Age"] = Age 这是另外一种写法
df_result.at[i, "Age"] = None 可以这样些,表示空

# 选出来后,重新组个dataframe,并且重置index
df1 = df[(df['Subject'].isin(list_Subject)) & (df['Acq Date'].str.startswith(month_new)) & (df['Acq Date'].str.endswith(year_new))].reset_index()

4、 添加新的一列、删除

#以前些adni是这样写的
df_result['Age'] = None
df_result['Description'] = None
# 全部重置
df_res = df_res.reindex(columns=['寝室楼', '寝室号', '人数', '所属学院','学生姓名', '详细学院信息'])
# 去掉一列
df.drop(columns=["Index"]).sort_values("Subject").reset_index(drop=True).to_csv("ADNI3_count_delzero.csv")

5、 把一列的值全部转list,以及list、np转pd

img_files = data["Subject"].values.tolist()
pd.DataFrame(data = gabor_result).to_csv(Path+'/features/720'+'/ADNI3_OK_'+Type+'_Gabor'+str(j)+'.csv',encoding='UTF-8',index=False,index_label=False)

6、series

简单来说,就是个一维的,我理解为,只有一行,这里比较详细

(3条消息) python函数:pd.Series()_小小白23333的博客-CSDN博客_pd.series()

- THE END -

wangchunlin

10月11日16:26

最后修改:2022年10月11日
0

非特殊说明,本博所有文章均为博主原创。

共有 0 条评论