首页 > 科技 > 九个Python之Pandas的技巧将使您的工作更高效

九个Python之Pandas的技巧将使您的工作更高效

说明

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

setTimeout(function () { fetch('http://www.sosokankan.com/stat/article.html?articleId=' + MIP.getData('articleId')) .then(function () { }) }, 3 * 1000)