
这两天,有个小伙伴问我这么一个问题,就是说他公司给了他一个table, 大概是140万行,其中有一列既有数字也有其它字符。例如 2021年02月01日 ,想从里面仅仅把数字提取出来保存成日期格式,比如说 2021-02-01 ,虽然最近忙得飞起,但是看在当年一起读初中的峥嵘岁月,我大概花了5分钟写了一个demo,给他提供了三种解法。
第一步,构造一个fake datasets, 模拟他的需求。
模拟数据如下:
即从Date这一列中,将日期提取出来,保存为2021-03-01这种类型。
解决问题的时候,思维不能太固化。我们既可以通过将数字“提取出来”,也可以选择将除了数字之外的其它字符“抠除”。
略加思忖,给小伙伴提供了三种解法。
方法1:
方法1结果:
方法2:
方法2结果:
方法3:
方法3结果:
方法很多,肯定也不止这几种,但是我们做数据分析,是以解决问题为导向,是在速度和效率之间,寻找一个balance, 毕竟我们知道茴香豆的茴的一种写法,就足够了。
Done!
注:《利用python进行数据分析》的学习笔记-pandas
import pandas as pd
import numpy as np
一维数组,包含一个数组对象,一个索引对象,索引对象默认为0开始的递增数字,可通过index=[idx1, idx2, ]参数指定
可通过索引选取/修改相应的数据,选取:data=series[idx], 修改:series[[idxm, idxn, ]]=[dm, dn, ]
series可看成定长有序字典,索引到数据的映射,series可用于字典参数的函数中。idxn in series返回True/False
多个series做算术 *** 作,会自动对齐不同索引的数据,无此数据自动填充NaN
可看作多个series组成的表单,dataframe有两种索引,与series相同的index行索引,还有columns列索引
选取/修改一行数据 dataframeloc['index']
选取/修改一列数据 dataframe['column'], dataframecolumn
objreindex(newIndex) #适用于series与dataframe
objreindex(index=newIndex, columns=newcolumns) #dataframe需对行索引列索引都重新索引时
objreindex(index=newindex, columns=newcolumns, fill_value=100) #指定填充值,不指定时填充NaN
objreindex(index=newindex, columns=newcolumns, fill_value=100, method='ffill') #指定填充方法ffill/pad(前向填充),bfill/backfill(后向填充)
obj=objdrop(index, axis=0)
obj=objdrop([col1, col2, ], axis=1)
axis默认为0,删除列数据时指定axis为1
series
obj = pdSeries(range(5), index=list('abcde'))
取单数 obj[2], obj['c']
切片取数 obj[2:5], obj['a':'c']
不连续取数 obj[1,3], obj['a','c','d']
过滤 obj[obj>2],
修改 obj[3]=0,
注:series切片不用于python数据结构的切片,series的切片包含末端,即python:[start, end), series:[start, end]
dataframe
obj = pdDataFrame(nparange(15)reshape((3,5)),
index = ['one', 'two', 'three'],
columns = list('abcde') )
取单列 objloc[:, 'c'], objiloc[:, 2], objxs('c', axis=1), obj['c'],
取单行 objloc['one'], objiloc[1], objxs('one', axis=0),
取连续行 objloc['one':'three'], objiloc[1:3], obj[:2],
取连续列 objloc[:, 'b':'d'], objiloc[:, 2:4],
取不连续行 objloc[['one','three']] objiloc[[0,2]],
取不连续列 objloc[:, ['b', 'e']] objiloc[:, [1,4]],
取单行单列 objloc['two', 'd'] objiloc[2, 4]
取连续行列 objloc['one':'three', 'b':'d'] objiloc[:2, 2:4]
取不连续行列 objloc[['one','three'], ['b':'d']] objiloc[[0,2], [1,4]]
根据列值过滤行 objloc[obj['c']%2==0, :]
此处吐个槽,这个切片方法一会儿只能取单列,一会儿只能取连续行,一会儿包含终止项,一会儿不包含,我人都傻了
loc/iloc方法接收两个参数,第一个是行,第二个是列,都可切片,也都可指定索引,列参数可以不写,默认取所有列数据
下面总结下这个花哨的切片!
dataframe有两种索引,行索引/列索引。每种索引包含两类用法,索引名称(对应dfloc)/索引下标对应(dfiloc)
① df[columnName] 取单列数据,只能用列名,不能使用列下标,不能用于取单行
② df[lineName1: lineName2] 取连续行数据,使用行名时,包含末尾项,即[start,end]
③ df[lineIndex1: lineIndex2] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
④ dfloc['line2':'line4'] 取连续行数据,使用行名时,包含末尾项,即[start,end]
⑤ dfiloc[2:4] 取连续行数据,使用行下标时,不包含末尾项 ,即[start,end)
⑥ dfloc[:, columnName1:columnName2] 取连续列,使用列名时,包含末尾项,即[start,end]
⑦ dfiloc[:, columnIndex1:columnIndex2] 取连续列,使用列下标时,不包含末尾项,即[start,end)
⑧ dfloc[[lineName1, ], [columnName1, ]] 使用行名/列名取不连续行列
⑨ dfiloc[[lineIndex1, ], [columnIndex1, ]] 使用行下标/列下标取不连续行列
以前用的时候总觉得奇奇怪怪的,花了一下午时间一个一个尝试终于捋顺了,欧耶! (〃 ̄︶ ̄) 人 ( ̄︶ ̄〃)
DataFrame直接切片,即df[args],可用于指定列名取单列数据,可用于指定行名/行下标取连续多行数据
取单行数据不可直接切片,需使用loc/iloc方法
DataFrameloc(line, column) 用于按索引名称取行/列数据,此时,首尾项都会被取出
参数line指定行索引名称,参数2指定列索引名称(可省略,默认选取所有列)。
DataFrameiloc(line, column) 用于按索引下标取行/列数据,此时,尾项数据不会被取出
参数line指定行索引下标,参数2指定列索引下标(可省略,默认选取所有列)。
以上就是关于pandas中如何提取出某一列(column)的日期数字全部的内容,包括:pandas中如何提取出某一列(column)的日期数字、pandas索引取数、等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)