说明
Pandas是用于结构化数据处理的最流行的的Python软件包。在这里我想介绍一些读者以前可能不知道的有趣技巧,我相信它们很有用。
read_csv
每个人都知道这个命令。但是,如果你尝试读取特别大的数据文件(例如: 100G的csv文件),请尝试添加以下参数:nrows = 10,以便在实际加载整个表之前仅读取表的一小部分。然后,您可以避免因为选择了错误的分隔符而导致的读取错误(因为分割符不一定总是用 "," 分隔)。
(另外一种方法,如果你是使用mac 或者 linux,您可以在shell中使用"head"命令查看任何文本文件中的前10行(例如):head -n 10 data.txt。)
然后,您可以通过使用df.columns.tolist()提取所有你需要的列,然后添加usecols = ['c1','c2',…]参数来加载所需的列。另外,如果您知道一些特定列的数据类型,则可以添加参数dtype = {'c1':str,'c2':int,…},这样可以更快地加载。此参数的另一个优点是,如果您的列同时包含字符串和数字,则将其类型声明为字符串是一种很好的做法,因此在尝试使用此列作为键合并表时不会出错。
select_dtypes
使用pandas进行数据预处理,select_dtypes将为您节省一些时间。读入Dataframe后,每列的默认数据类型可能是bool,int64,float64,object,timedelta64或datetime64。您可以先通过以下方式检查分布
df.dtypes.value_counts()
了解Dataframe的所有可能的数据类型,然后执行
df.select_dtypes(include=['float64', 'int64'])
选择仅具有数字特征的子Dataframe。
copy
如果您还没有听说过,这是一个重要的命令。
因为”=“操作符并未复制df并将其分配给另一个df,而是建立了指向原始df的指针。因此,新df中的中的任何更改都会导致原始df中的更改。要解决此问题,您可以执行以下两种方式操作
df2 = df1.copy()
或者
deepcopy()
map
这是执行简单数据转换的命令。首先定义一个字典,其中“key”为旧值,“value”为新值。
通过map(),完成了数据列的转换操作。
apply or not apply?
如果我们想用其他一些列作为输入来创建一个新列,那么apply函数有时会很有用。
在上面的代码中,我们定义了一个具有两个输入变量的函数,并使用apply函数将其应用于列“ Sex”和“ Age”。
但是“apply”的问题是有时速度太慢。假设您要计算两列“ c1”和“ c2”的最大值,那么您当然可以
df['maximum'] = df.apply(lambda x: max(x['c1'], x['c2']), axis = 1)
但是您会发现它比以下命令慢得多:
df['maximum'] = df[['c1','c2']].max(axis =1)
要点:如果可以使用其他内置函数完成相同的工作(通常更快),请不要使用apply。例如,如果您想将列'c'舍入为整数,请执行round(df ['c'],0)或df ['c']。round(0),而不要使用apply函数:df.apply(lambda x: round(x['c'], 0), axis = 1)。
value counts
这是检查列值分布的命令。例如,如果您要检查“ Sex”列中每个值的可能值和频率,则可以执行
还有一些有用的参数:
A. normalize = True:如果要检查频率而不是计数。
B. dropna = False:如果您还想在统计信息中包含缺失值。
C . df['Sex'].value_counts().reset_index():如果要将统计信息表转换为熊猫数据框并对其进行操作
D . df['Sex'].value_counts().reset_index().sort_values(by='index'):在“ Sex”列中显示按不同值而不是计数排序的统计信息。
缺失值的数量
在构建模型时,您可能要排除缺少太多值的行或者排除所有缺少值的行。您可以使用isnull() 和sum()来计算指定列中缺失值的数量。
选择具有特定ID列表的行
在SQL中,我们可以使用SELECT * FROM…WHERE ID in('A001','C022',…)来获取具有特定ID的记录。如果您想Pandas中做同样的事情,可以这样做:
to_csv
同样,这是每个人都会使用的命令。我想在这里指出一个小技巧。
print(df[:5].to_csv())
您可以使用此命令将要写入的文件的前五行准确打印出来。
结论:
本次介绍了pandas中常用的几个数据处理方法,希望能能有些帮助。
谢谢。
本文来自投稿,不代表本人立场,如若转载,请注明出处:http://www.sosokankan.com/article/1452239.html