pandas是建立在numpy、高级数据结构和操作工具之上的,它们使数据分析工作更快更容易。本文为你带来10个玩转Python的技巧,分分钟学会过关成为高手!1.read_csv这个命令大家都知道。但是如果你要读取非常大的数据,尝试添加这个参数:nrows=5在实际加载整个表之前只读取表的一小部分。然后你可以通过选择错误的分隔符来避免错误(它不必总是用逗号分隔)。(或者,您可以在linux中使用“head”命令来检查任何文本文件中的前5行,例如:head-c5data.txt)然后,您可以使用df.columns.tolist()来提取列表,然后添加usecols=['c1','c2',...]参数以加载所需的列。另外,如果你知道几个特定列的数据类型,你可以添加参数dtype={'c1':str,'c2':int,...}以便数据加载更快。此参数还有另一个优点。如果你有一个包含字符串和数字的列,将其类型声明为字符串是一个不错的选择,这样你就不能尝试使用此列作为键来合并表。错误。2.select_dtypes如果必须用Python进行数据预处理,那么这个命令可以节省一些时间。读取表格后,每列的默认数据类型可以是bool、int64、float64、object、category、timedelta64或datetime64。可以先看df.dtypes.value_counts()命令的分布结果,知道数据框所有可能的数据类型,然后执行df.select_dtypes(include=['float64','int64'])仅选择具有数字特征数据框的子类。3.Copy这是一个重要的命令。如果执行以下命令:importpandasaspddf1=pd.DataFrame({'a':[0,0,0],'b':[1,1,1]})df2=df1df2['a']=df2['a']+1df1.head()你会发现df1变了。这是因为df2=df1并不是复制df1的值赋值给df2,而是设置一个指向df1的指针。因此,df2的任何变化都会导致df1发生变化。解决这个问题可以:df2=df1.copy()br或者fromcopyimportdeepcopydf2=deepcopy(df1)4。Map这是一个可以做简单数据转换的命令。首先定义一个字典,其中'keys'是旧值,'values'是新值。level_map={1:'high',2:'medium',3:'low'}df['c_level']=df['c'].map(level_map)举几个例子:True,False为1,0(用于建模);定义级别;用户定义的词法编码。5.申请还是不申请?如果我们想创建一个以其他列作为输入的新列,apply函数有时非常有用。defrule(x,y):ifx=='high'andy>10:return1else:return0df=pd.DataFrame({'c1':['high','high','low','low'],'c2':[0,23,17,4]})df['new']=df.apply(lambdax:rule(x['c1'],x['c2']),axis=1)df.head()在上面的代码中,我们定义了一个具有两个输入变量的函数,并使用apply函数将其应用于列'c1'和'c2'。但是“applyfunction”的问题是它有时太慢了。如果要计算“c1”和“c2”两列的最大值,可以:df['maximum']=df.apply(lambdax:max(x['c1'],x['c2']),axis=1)但是你会发现它比这个命令慢很多:df['maximum']=df[['c1','c2']].max(axis=1)注意:如果你可以使用其他内置函数做同样的工作(它们通常更快),不要使用应用。例如,如果要将列“c”舍入为整数,请执行round(df['c'],0)而不是使用应用函数:df.apply(lambdax:round(x['c'],0),axis=1)6.valuecounts这是检查值分布的命令。例如,如果你想检查'c'列中每个值的可能值和频率,你可以执行以下df['c'].value_counts()其中有一些有用的技巧/参数:A.normalize=True:如果您正在检查频率则不算数。B.dropna=False:如果要统计数据中包含的缺失值。c.df['c'].value_counts().reset_index():如果要将stats表转换成pandas数据框并对其进行操作。D.df['c'].value_counts().reset_index().sort_values(by='index'):显示按值而不是计数排序的统计信息。7.缺失值个数建立模型时,您可能希望排除具有许多或所有缺失值的行。您可以使用.isnull()和.sum()来统计指定列中缺失值的数量。importpandasapdimportnumpyasnpdf=pd.DataFrame({'id':[1,2,3],'c1':[0,0,np.nan],'c2':[np.nan,1,1]})dfdf=df[['id','c1','c2']]df['num_nulls']=df[['c1','c2']].isnull().sum(axis=1)df.head()8.选择具有特定ID的行在SQL中,我们可以使用SELECT*FROM...WHEREID('A001','C022',...)来获取具有特定ID的记录。如果你想用Pandas做同样的事情,你可以dfdf_filter=df['ID'].isin(['A001','C022',...])df[df_filter]9。Percentilegroups你有一个数字列,并且想把列中的值分类成组,例如列的前5%,进入第1组,前5-20%进入第2组,前20%-50%进入第3组,***50%进入第4组。当然,您可以使用pandas.cut来完成,但这里有另一个选项:importnumpyasnpcut_points=[np.percentile(df['c'],i)foriin[50,80,95]]df['group']=1foriinrange(3):df['group']=df['group']+(df['c']
