pandas 常见 使用方法 以及使用场景

numpy

  • Numpy:是N维数组对象(ndarray),
    • 是通用的同构数据多维容器。即其中的所有元素必须是同种类型
    • ndarray有两个属性。shape:表示各维度大小的元祖 dtype:数组数据类型的对象
  • ndarray 数据类型
    • float64 int32
  • numpy 索引:
    • 数组切片是原始数组的视图,视图上的任何修改都会直接反映到原数组上。
    • 切片索引
      array [
      [1,2,3],
      [4,5,6],
      [7,8,9] ]
      array[1,:2] [4,5]
      第一个值1是沿着第0轴开始切的,得到[4,5,6]。第二个值 :2 取到这个数组的 [4,5]
    • 布尔型索引 == != &(和) |(或) 组合多个布尔条件
      通过布尔型数组设置值
    • 花式索引 利用整数数组进行索引
      arr=np.empty((8,4))
      for i in range(8):
      arr[i]=i
      arr [[0,0,0,0],[1,1,1,],[2,2,2],…[8,8,8,]]
  • 数组转置和轴对换
  • 通用函数:一种对ndarray中的数据执行元素级运算的函数(分为一元ufunc、二元ufunc)
    • add maximum 接受两个数组(binary),并返回一个数组
    • 有些ufunc可以返回多个数组,modf用于浮点数数组的小数和整数部分。

Pandas DataFrame 有行索引 列索引

  • 1.读取文件 data=pd.reade_csv(“ChapterFour/centerPort.csv”,usecols=[“shipid”,“shiptype”,“imo”,“name”],header=0)
    • usecols 读取指定列 参数类型为列表,为列名或者某几列的列数 如:[“shipid”,“shiptype”,“imo”,“name”] 或 [0,1,2,3,4]
    • header=0 指定用作列名的行数 默认为header=0
  • 2.去重 undifiedData=data.drop_duplicates(subset=[“shipid”],keep=“first”)
    • subset 指定特定列进行去重 subset=[“shipid”]
    • keep=“first” 删除重复项的策略,first 保留第一次出现的项,其他均删除
  • 3.合并 mergeData=pd.merge(df1,df2,left_on=“mmsi”,right_on=“shipid”,how=“left”)
    • left 左连接对象 DataFrame 或者 series object 序列化对象。如:df1
    • right 右连接对象 DataFrame 或者 series object 序列化对象。如:df2
    • left_on=“mmsi” 左侧对象的连接列名
    • right_on=“shipid” 右侧对象的连接列名
    • how=‘inner’, 联接方式 left 左连接 右连接 全连接 内连接
    • 合并判断条件为两列:
      • pd.merge(df0, df1, how=‘left’,on=[“mmsi”,“acqtime”],indicator=True)
      • 左连接有两个判断条件,同一个mmsi,同一个时间 才能找到连接
      • indicator=True 提示数据的来源
        在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-I5hk5GZL-1597309736709)(Img/pic4.png)]

  • 3.连接 pd.concat

    • pd.concat([df1,df2],axis=0)
  • 4.分组 GroupByObject=data.groupby([“PolygenID”]) 用mapper或者多个列名进行分组

    • [“PolygenID”] 分组列
    • 读取GroupBy 对象
      • for GroupName,GroupData in GroupByObject 得到每组的组名和组数据内容
      • GroupData 数据为DataFrame,遍历GroupData只需
        for index,row in GroupData.iterrows()
  • 5.DataFrame to list DataFrame 转化为list 对象

    • np.array(groupData).tolist() 先转化为numpy对象,在转化为list对象
  • 6.list to DataFrame list(list里面嵌套多个list) 转化为DataFrame 对象

    • pd.DataFrame(lists,columns=["",""])
  • 7.dataFrame 合并 pd.concat([df,PolygenDataFrame],axis=0,ignore_index=True)

    • pd.concat 合并两个DataFrame(df,PolygenDataFrame)为一个DataFrame,axis=0指示为上下合并,axis=1指示为左右合并, ignore_index 是否忘记两个DataFrame原来索引
      [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-u014UfaL-1597309736710)(Img/pic3.png)]
      在这里插入图片描述
  • 8.添加DataFrame某列元素

    • PolygenDataFrame[“flag”]=FlagList
    • 某列都为一个值 PolygenDataFrame[“flag”]=“true”
  • 9.DataFrame 取出包含指定条件的多行

    • 选取某列含有特殊数值的行 df2[df2[“country”].isin[1]] 选取country列内容中包含数字1的行
    • 选取某列满足一定条件的行 df2[df2[“country”]==“China”] 选取country列内容为"China"的行
    • 选取某列满足一定条件的行 me[me[“berthID”].isin([“13336”,“10854”,“15323”,“8890”,"1614
    • 2",“17710”])]
      选取不在列表中的行记录 me[~(me[“berthID”].isin([“13336”,“10854”,“15323”,“8890”,“16142”,“17710”]))]
    • 多个条件用 ‘&’ 连接 &表示 与 ,即条件同时满足
      df[(df[“acqTime”] >= 1535731200) & (df[“acqTime”] <= 1538323200)]
    • 多个条件用 ‘|’ 连接, |表示 或,即只有一个条件满足
      df2 = df2[(df2[“ShiptypeLevel4”].isin(
      [“Self Discharging Bulk Carrier”, “Bulk Carrier”, “Bulk/Oil Carrier”,
      “Bulk/Liquid Carrier”])) | (df2[“ShiptypeLevel3”] == “Container”)]
  • 10.DataFrame 取某行数据

    • df.iloc[2] 取第二行数据
    • df.loc[[2]] 取索引列索引值(index)为2的行
  • 11.一个DataFrame追加另一个DataFrame数据 empty = pandas.DataFrame({“name”:"",“age”:"",“sex”:""})​

    • 创建一个新的 DataFrame new = pandas.DataFrame({“name”:"",“age”:"",“sex”:""},index=[“0”])​。
    • ​empty = empty.append(new,ignore_index=True)​
    • 也可以两句合为一句
      data = data.append({“mmsi”: name, “mmsiTtime”: mmsiTtime}, ignore_index=True)
  • 12.遍历DataFrame Pandas

    • for index,row in me.iterrows():
      geom=row[“geom”]取到某一列
  • 13.DataFrame

  • 保存为csv文件

    • me.to_csv(“1206/latlon.csv”, index=True, header=True,columns=[“berthId”,“flightNumber”])
    • 参数说明: index:行名是否保存
  • 14.pandas pandas.cut 离散化。把连续数据离散化(分箱操作) 。根据指定分界点对连续数据进行分箱处理 pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates=‘raise’)

    • 案例:listBins=[0,2000,4000,6000,8000,10000,12000,16000,20000,800000]
      listLabels=["<2000TEU",“2000-4000TEU”,“4000-6000TEU”,“6000-8000TEU”, “8000-10000TEU”,“10000-12000TEU”,“12000-16000TEU”,“16000-20000TEU”, “>20000TEU”]
      pd.cut(undifiedData[‘TEU’],bins=listBins,labels=listLabels,include_lowest=True,right=False)
    • x: 离散化的数据;必须为一维
    • bins:分箱依据(分级依据)。 序列化标量(sequence of scalars) 定义允许非一定宽度的箱子边界;int 定义序列“x”相同宽度的箱子个数;IntervalIndex 间隔指数:定义确实要使用的箱子间隔
    • labels: 指定Return箱子的标签名。labels 长度必须和结果离散集合长度一致
    • right:指定是否包含右边界
    • include_lowest :第一个间隔是否包含左闭包区间。上面样例为是否包含[0,2000]中的0
    • 与 pandas.value_counts()连用效果更好;计算每个箱子中的个数,并可以给这个箱子命名 (pd.value_counts return 格式为Series)
      score_out=pd.cut(undifiedData[‘TEU’],bins=listBins,labels=listLabels,include_lowest=True,right=False)
      resultSeries=pd.value_counts(score_out,sort=False,normalize=True)
  • 15.创建一个空的 DataFrame data=pd.DataFrame()

  • 16.nan判断 pd.isna(row[“shipclass”]) 判断row[“shipclass”]是否为nan 在DataFrame 中,nan为float类型,只能使用这种自带的方式判断是否为nan

  • 17.DataFrame 数据集 取某几列数据

    • df_test = pd.DataFrame(np.random.random(size=(4,4)))
    • df_test.loc[:,[1,3]] or df_test[[1,3]]

Pandas 数据预处理

Nan处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tqz8IFdo-1597309736712)(Img/pic6.png)]

  • 处理1
    • 将nan设置为0

      stu_info = pd.read_csv(‘student_info1.csv’,header=1)
      stu_info.fillna(0)
      在这里插入图片描述

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-V0F5uOhf-1597309736713)(Img/pic7.png)]

  • 网址 https://www.jianshu.com/p/ab64424ee99e
    在这里插入图片描述

取非NAN行 处理操作

df[(1 - pd.isnull(df[“Port_Name”])).astype(np.bool)] 取Port_Name 为非NAN行

创建一列指定长度数据

mmsiRow=[name for i in range(0,len(ordered))]

pandas 某列 进行数据类型转换

使用 astype() 进行类型转化
使用astype() 把 ‘TEU’ 这一列转换为float类型
df[‘TEU’] = df[‘TEU’].astype(“float”)

自定义函数清理数据

某列数据转化为int,并除以1e6
df[‘c6’] = df[‘c6’].values.astype(“int”)/1e6

自定义函数清洗方法1

  def convert_currency(var):
  """
  convert the string number to a float  
  _ 去除$  
  - 去除逗号,  
  - 转化为浮点数类型  
  """  
  new_value = var.replace(",","").replace("$","")  
  return float(new_value)  

df[“2016”]=df[“2016”].apply(convert_currency)

OR
df[“2016”].apply(lambda x: x.replace(",","").replace("$","")).astype(“float64”)

利用np.where() function 将active 列转化为布尔值
df[“Active”] = np.where(df[“Active”] == “Y”, True, False)

Series

  • Series 是一种类似于一维数组的对象,它有一组数据(各种Numpy数据类型)以及一组与之相关的数据标签(即索引)组成。
    obj=Series([4,7,-5,3])
    in:obj
    out:0 4
    1 7
    2 -5
    3 3
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pandas是一个强大的数据分析工具,适用于多种场景。以下是一些Pandas使用场景: 1. 数据清洗和预处理:Pandas提供了各种方法和函数来处理和清洗数据,例如填充缺失值、删除重复数据、处理异常值等。 2. 数据探索性分析:Pandas可以用于数据的探索性分析,通过计算基本统计信息(如平均数、中位数、标准差、最大值、最小值等)来了解数据的分布和特征。此外,Pandas还可以绘制各种图表(如直方图、散点图、折线图等),帮助我们更好地理解和可视化数据。 3. 数据聚合和分组分析:Pandas提供了强大的聚合和分组功能,可以根据某个或多个变量对数据进行分组,并进行聚合操作,如计算总和、计数、平均值等。这对于数据集合的分析和汇总非常有用。 4. 数据合并和连接:Pandas可以用于将多个数据集按照指定的列进行合并和连接,例如数据库中的join操作。这在处理多个数据源或多个表格的数据时非常有用。 5. 时间序列数据分析Pandas具有强大的时间序列数据处理功能,可以对时间序列数据进行重采样、滑动窗口计算、时间窗口分组等操作。这对于金融数据、气象数据、股票数据等时间相关的数据分析非常有帮助。 总之,Pandas是一种功能强大的数据分析工具,适用于数据清洗和预处理、数据探索性分析、数据聚合和分组分析、数据合并和连接以及时间序列数据分析等多个场景。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [pandas 常见 使用方法 以及使用场景](https://blog.csdn.net/qq_18617299/article/details/107984685)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [pandas库的使用场景](https://blog.csdn.net/kk_cola/article/details/129699402)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值