pandas以字符串读取数据_Pandas必知必会的18个实⽤技苹果广告歌曲
巧,值得收藏!!
⼲净整洁的数据是后续进⾏研究和分析的基础。数据科学家们会花费⼤量的时间来清理数据集,毫不夸张地说,数据清洗会占据他们80%的⼯作时间,⽽真正⽤来分析数据的时间只占到20%左右。
所以,数据清洗到底是在清洗些什么?
10月26日考试通常来说,你所获取到的原始数据不能直接⽤来分析,因为它们会有各种各样的问题,如包含⽆效信息,列名不规范、格式不⼀致,存在重复值,缺失值,异常值等.....
本⽂会给⼤家介绍⼀些Python中⾃带的Pandas和NumPy库进⾏数据清洗的实⽤技巧。
⼀、 read_csv 读取⽂件
这是读取数据的⼊门级命令,在分析⼀个数据集的时候,很多信息其实是⽤不到的,因此,需要去除不必要的⾏或列。这⾥以csv⽂件为例,在导⼊的时候就可以通过设置pd.read_csv()⾥⾯的参数来实现这个⽬的。
先来感受⼀下官⽅⽂档中给出的详细解释,⾥⾯的参数是相当的多,本⽂只介绍⽐较常⽤的⼏个,感兴趣的话,可以好好研究⼀下⽂档,这些参数还是⾮常好⽤的,能省去很多导⼊后整理的⼯作。
【header】默认header=0,即将⽂件中的0⾏作为列名和数据的开头,但有时候0⾏的数据是⽆关的,我们想跳过0⾏,让1⾏作为数据的开头,可以通过将header设置为1来实现。
【ucols】根据列的位置或名字,如[0,1,2]或[‘a’, ‘b’, ‘c’],选出特定的列。
【nrows】要导⼊的数据⾏数,在数据量很⼤、但只想导⼊其中⼀部分时使⽤。
【names】:指定⾃定义列名。此列表中不允许有重复项。
【index_col】: 指定⽤作数据框的⾏标签的列,以字符串名称或列索引的形式给出
【na_values】:指定数据框中需要被识别为NA/NaN 的字符串或字符串列表
当⼀列缺失时直接指定 na_values='-1'
当多列缺失时,增加字典的键值对即可 na_values={'a':'-1','b':'-10'}
⼆、重新命名列
当原始数据的列名不好理解,或者不够简洁时,可以⽤.rename()⽅法进⾏修改。这⾥我们把英⽂的列名改成中⽂,先创建⼀个字典,把要修改的列名定义好,然后调⽤rename()⽅法。
new_names = {'旧列名': '新列名'}
三、重新设置索引
数据默认的索引是从0开始的有序整数,但如果想把某⼀列设置为新的索引,除了可以⽤read_csv()⾥的参数index_col,还可以⽤.t_index()⽅法实现。
df.t_index('列名', inplace=True)
另外补充,如果数据经过删除或结构调整后,我们可以重置索引,让索引从0开始,依次排序。
<_index(drop=True)辛集中学
四、⽤字符串操作规范列
字符串str操作是⾮常实⽤的,因为列中总是会包含不必要的字符,常⽤的⽅法如下:
lower()
upper()
str.lower() 是把⼤写转换成⼩写,同理,str.upper()是把⼩写转换成⼤写,将⽰例中⽤⼤写字母表⽰的索引转换成⼩写。
capitalize()
martin sheen设置⾸字母⼤写
replace()
strip()
英国bbc
去除字符串中的头尾空格、以及\n \t。
split()
str.split('x') 使⽤字符串中的'x'字符作为分隔符,将字符串分隔成列表。这⾥将列中的值以'.'进⾏分割。
get()
<() 选取列表中某个位置的值。接着上⾯分割后的结果,我们⽤(0)取出列表中前⼀个位置的数值,⽣成新的⼀列。
contains()
find()
str.find("-")检测字符串中是否包含"-",如果包含,则返回该⼦字符串开始位置的索引值;如果不包含,则返回-1。
学完基本的字符串操作⽅法,我们来看⼀下如何结合NumPy来提⾼字符串操作的效率。
我们可以将Pandas中的.str()⽅法与NumPy的np.where函数相结合,np.where函数是Excel的IF()宏的⽮量化形式,它的语法如下:
np.where(condition, then, el)
如果condition条件为真,则执⾏then,否则执⾏el。这⾥的condition条件可以是⼀个类数组的对象,也可以是⼀个布尔表达式,我们也可以利⽤np.where函数嵌套多个条件进⾏⽮量化计算和判断。
np.where(condition1, x1,
np.where(condition2, x2,
np.where(condition3, x3, ...)))
五、⾃定义函数规范列
接下来就要对列中的字符串进⾏整理,除了利⽤循环和.str()⽅法相结合的⽅式进⾏操作,我们还可以选择⽤applymap()⽅法,它会将传⼊的函数作⽤于整个DataFrame所有⾏列中的每个元素。
先定义函数get_citystate(item),功能是只提取元素中的有效信息。然后,我们将这个函数传⼊applymap(),并应⽤于df3,看起来是不是⼲净多了,结果如下:
cboe六、copy
如果你没听说过它的话,我不得强调它的重要性。输⼊下⾯的命令:
import pandas as pd
df1 = pd.DataFrame({ a :[0,0,0], b : [1,1,1]})
df2 = df1
df2[ a ] = df2[ a ] + 1
df1.head()打气什么意思
你会发现df1已经发⽣了改变。这是因为df2 = df1并不是⽣成⼀个df1的复制品并把它赋值给df2,⽽是设定⼀个指向df1的指针。所以只要是针对df2的改变,也会相应地作⽤在df1上。为了解决这个问题,你既可以这样做:
df2 = py()
也可以这样做:
from copy import deepcopy
df2 = deepcopy(df1)
七、value_counts()
这个命令⽤于检查值的分布。你想要检查下“c”列中出现的值以及每个值所出现的频率,可以使⽤:when christmas comes to town
df[ c ].value_counts()
下⾯是⼀些有⽤的⼩技巧/参数:
normalize = True:查看每个值出现的频率⽽不是频次数。
dropna = Fal: 把缺失值也保留在这次统计中。
sort = Fal: 将数据按照值来排序⽽不是按照出现次数排序。
df[‘c].value_counts().ret_index(): 将这个统计表转换成pandas的dataframe并且进⾏处理。
⼋、lsin () ,依据指定ID来选取⾏
lsin () ⽤于过滤数据帧。Isin () 有助于选择特定列中具有特定(或多个)值的⾏。
在SQL中我们可以使⽤ SELECT * FROM … WHERE ID in (‘A001’,‘C022’, …)来获取含有指定ID的记录。如果你也想在Pandas 中做类似的事情,你可以使⽤:
df_filter = df[ ID ].isin([ A001 , C022 ,...])
df[df_filter]
九、lect_dtypes()
lect_dtypes() 的作⽤是,基于 dtypes 的列返回数据帧列的⼀个⼦集。这个函数的参数可设置为包含所有拥有特定数据类型的列,亦或者设置为排除具有特定数据类型的列。
# We ll u the same dataframe that we ud for read_csv
framex = df.lect_dtypes(include="float64")# Returns only time column
⼗、pivot_table( )
pivot_table( ) 也是 Pandas 中⼀个⾮常有⽤的函数。如果对 pivot_table( ) 在 excel 中的使⽤有所了解,
那么就⾮常容易上⼿了。
pivot_table(data, values=None, index=None, columns=None,aggfunc='mean', fill_value=None, margins=Fal,
dropna=True, margins_name='All')
推行英文pivot_table有四个最重要的参数index、values、columns、aggfunc
Index就是层次字段,要通过透视表获取什么信息就按照相应的顺序设置字段
Values可以对需要的计算数据进⾏筛选