pandas处理数据的基本方法
admin
2023-07-06 00:03:44
0

  pandas的数据结构常用到一维(series),二维(DataFrame)等:

  对于二维数据

  二维数据包含行索引和列索引

  行索引叫index,axis=0

  列索引叫columns,axis=1

  下面使用代码构造一个二维结构数据如下:

  import pandas as pd

  import numpy as np

  # normal里面参数,此次构造的是平均值为0,标准差为1,10行11列数据

  test_data = np.random.normal(0,1,[10,11])

  test_data_frame = pd.DataFrame(test_data)

  print(test_data_frame)

  可以看出,默认添加了行索引[index]和列索引[columns]

  若需要自己指定行索引或者列索引,可以在构造DataFrame时加相应参数,如下这样: np.random.normal(0,1,[10,11])

  index_list = ["row"+str(i) for i in range(10)]

  column_list = ["column"+str(i) for i in range(11)]

  test_data_frame = pd.DataFrame(test_data,index=index_list,columns=column_list)

  print(test_data_frame)

  打印效果如下:

  可以通过test_data .shape获取数据的行列形状([10,11]),即可以这样获取数据的行数和列数:

  # 获取行数

  test_data.shape[0]

  # 获取列数

  test_data.shape[1]

  对于DataFrame的其他数据获取如下:

  # 获取行索引列表

  test_data_frame.index

  # 获取列索引列表

  test_data_frame.columns

  # 获取除索引外的数据矩阵值

  test_data_frame.values

  # 将数据转置(包括索引)

  test_data_frame.T

  # 获取数据前num行(若没有num值,默认获取前五行)

  num=5

  test_data_frame.head(num)

  # 获取数据后num行(若没有num值,默认获取后五行)

  test_data_frame.tail(num)

  # 将原来的行索引删除,变成默认的数字行索引

  test_data_frame = test_data_frame.reset_index(drop=True)

  # 将原来的行索引变成值,用默认的数字行索引作为行索引

  test_data_frame = test_data_frame.reset_index()

  还可以设置多重索引如下:

  test_data_frame=test_data_frame.set_index(keys=['column0','column1'])

  print(test_data_frame)

  打印效果如下:

  此时的数据结构为MultiIndex结构数据(三维数据)

  可以通过pandas生成一组连续时间序列

  # 构建一个从2018.1.1开始的10天时间序列

  date_test = pd.date_range(start='2018-1-1',end=None,periods=10,freq="D")

  print(date_test)

  打印效果如下:

  其中start为开始时间,end为结束时间,periods为相隔天数(若无end的情况下),freq为指定间隔时间,默认为“D”(每天),可以指定“12H”表示每12小时,“B”每个工作日(周一到周五,包含节假日)

  series一维结构:

  一维数据(series)只有行索引

  即将二维Dataframe取特定行就是一维数据如:

  serise_data = test_data_frame['column1']

  print(serise_data)

  打印效果如下:

  pandas中二维Dataframe数据获取

  直接使用索引获取数据必须先列后行

  如取第一列,第三行数据,test_data_frame[‘column0’][‘row2’]

  通过索引获取数据:

  通过索引名获取范围数据

  # start_index:end_index,表示开始的行索引到结束的行索引,xx_column表示取哪一列的值

  test_data_frame.loc[start_index:end_index,xx_column]

  通过索引下标获取范围数据

  # 表示取第0行到第3行的xx_column列的值

  test_data_frame.iloc[0:3,xx_column]

  通过索引进行排序

  # ascending默认为Ture升序

  test_data_frame = test_data_frame.sort_index(ascending=False,)

  print(test_data_frame)

  打印效果如下:

  通过内容进行排序

  # by指定通过哪一列排序,此处为第二列,降序

  test_data_frame = test_data_frame.sort_values(by="column1",ascending=False,)

  print(test_data_frame)

  打印效果如下:

  DataFrame数据统计分析的基本方法

  求极值的方法

  求最大值:

  # 对列求最大值

  test_data_frame.max(0)

  # 对行求最大值

  test_data_frame.max(1)

  # 求最小值同理

  test_data_frame.max(0) #对列求最小值

  test_data_frame.max(1) #对行求最小值

  对列求最大值如下:

  对行求最大值如下:

  还可以获取最大值和最小值的位置

  # 获取列最大值的位置

  test_data_frame.idxmax(axis=0)

  # 获取行最大值的位置

  test_data_frame.idxmax(axis=1)

  # 获取列最小值得位置

  test_data_frame.idxmin(axis=0)

  # 获取行最小值得位置

  test_data_frame.idxmin(axis=1)

  列最大值的位置如下:

  行最大值位置如下:

  累计求和无锡正规妇科医院 http://www.jlfukeyy.com/

  # 累计求第二列的值

  test_data_frame.column1.cumsum()

  打印结果如下:

  不能使用test_data_frame.row1.cumsum()累计求行的和

  通过比较大小来筛选数据

  # 取第二列大于0,且第四列大于0的数据

  test_data_frame[(test_data_frame['column1'] > 0) & (test_data_frame['column3'] > 0)]

  打印效果如下:

  还可以这样筛选如下:

  # 取第二列大于0,且第四列大于0的数据

  test_data_frame.query("column1>0 & column3>0")

  打印结果与上面一致

  文件读写方法

  读取csv文件

  # 读取xxxx.csv文件,并只读取第二列和第三列数据

  csv_dataframe = pd.read_csv("xxxx.csv",usecols=['column1', 'column2'])

  读取excel文件

  # 读取xxx.xlsx文件

  excel_data = pd.read_excel('xxx.xlsx')

  写入csv文件

  # index表示是否将行索引写入文件,columns指定将哪几列写入到文件

  # mode默认为r,表示重写,a表示追加,header表示是否将索引列写入文件

  test_data_frame.to_csv('xxx.csv',index=False,columns=['column1','column2','column3'],mode='a',header=False)

  写入到excel文件类似的

  # index表示是否将行索引写入文件,columns指定将哪几列写入到文件

  # excel没有mode参数,header表示是否将索引列写入文件

  test_data_frame.to_excel('xxx.xlsx',index=False,columns=['column1','column2','column3'],header=False)

  excel如下:

  缺失值处理的方法

  处理缺失值为NaN的数据

  可以删除NaN的行:test_data_frame.dropna()

  也可以以其他值添加:

  # 将第二列数据的NaN值用该列的平均值替换,test_data_frame['column1'].mean()取第二列的平均值

  test_data_frame['column1'].fillna(test_data_frame['column1'].mean(),inplace=True)

  处理缺失值为其他(如?)的数据

  其他格式异常值替换可以先将其替换成NaN的值再通过NaN替换成其他如平均值等

  # 将test_data_frame 中的?全部替换成NaN的值

  test_data_frame = test_data_frame.replace(to_replace="?",value=np.nan)

  然后再通过上面的缺失值NaN处理


相关内容

热门资讯

我国科学家为细胞信号“导航”开... 新华社济南5月31日电(记者张力元)人体细胞犹如一座精密的通信城市,每天都有大量“指令”穿梭传递,调...
极端大风突袭哈尔滨!过山车停摆... 极目新闻记者 詹钘5月31日,受强对流天气影响,哈尔滨国际会展中心体育场相关设施受到损坏,原计划当晚...
三原电缆取得电缆接头连接用防护... 国家知识产权局信息显示,上海三原电缆附件有限公司取得一项名为“一种电缆接头连接用防护结构”的专利,授...
原创 识... 还是那句话,机圈苦大屏久已…… 虽然大屏有大屏的美,但是小屏也有小屏的俏。在大屏旗舰占据主流的手机市...
玄戒技术取得分频电路专利,实现... 国家知识产权局信息显示,北京玄戒技术有限公司取得一项名为“分频电路、分频器、射频芯片和电子设备”的专...
为什么今年香会基调明显变了 5月29日—31日在新加坡举行的第23届香格里拉对话会(简称“香会”),见证着元首引领下大国关系继续...
成本几毛钱、假驱蚊液香精兑水,... 入夏升温,蚊虫进入活跃期,驱蚊防护成为民生刚需,《财经调查》持续接到消费者投诉,他们买到的多款网红驱...
越来越多80后90后,正在丧失... 六一儿童节到来之际,朋友圈里开始出现一种熟悉的热闹。有人晒出零食礼包,有人半开玩笑地向伴侣讨礼物,还...
洋保电子取得用于低温环境的电气... 国家知识产权局信息显示,洋保电子(太仓)有限公司取得一项名为“一种用于低温环境的电气柜”的专利,授权...
中日韩飞手争霸宁波!2026无... 潮新闻客户端 记者 陈冲 通讯员 朱凝 5月31日,2026小遛·无人机竞速世界杯(中国·宁波鄞州站...