数据科学必备技巧:Pandas读取外部文件与数据处理

数据科学必备技巧:Pandas读取外部文件与数据处理

文章目录

  • 数据科学必备技巧:Pandas读取外部文件与数据处理
    • 一、外部文件读取
      • 1、Excel文件读取
      • 2、TXT文件读取
      • 3、CSV文件读取
    • 二、常用函数介绍
      • 1、滚动计算函数
      • 2、数据框合并函数
      • 3、数据框关联函数

一、外部文件读取

在数据分析与挖掘中,业务数据大多存储在外部文件中,如Excel、TXT和CSV等,因此,需要将外部文件读取到Python中进行分析,Pandas包提供了非常丰富的函数来读取各种类型的外部文件,下面介绍常见的Excel、TXT和CSV文件的读取。

1、Excel文件读取

使用Pandas读取Excel文件需要使用read_excel()函数,下面是该函数的原型及参数介绍。

pd.read_excel(io, sheet_name=0, header=0, names=None, index_col=None, usecols=None, squeeze=False, dtype=None, engine=None, converters=None, true_values=None, false_values=None, skiprows=None, nrows=None, na_values=None, keep_default_na=True, verbose=False, parse_dates=False, date_parser=None, thousands=None, comment=None, skipfooter=0, convert_float=True, mangle_dupe_cols=True, **kwds)

下面是一些常用的参数及其介绍:

  • io:要读取的Excel文件的路径、URL、文件对象或BytesIO对象。
  • sheet_name:指定要读取的工作表名称或索引,默认为0,即第一个工作表。
  • header:指定要用作列名的行数,默认为0,即第一行。
  • names:指定列名,如果没有表头,则设置为None。
  • index_col:指定要用作行索引的列号或列名,默认为None。
  • usecols:指定要读取的列号或列名列表,默认为None,即读取所有列。
  • dtype:指定每列的数据类型。
  • skiprows:跳过的行数。
  • nrows:读取的行数。
  • na_values:指定要识别为缺失值的值。
  • parse_dates:将指定列解析为日期。
  • date_parser:指定日期解析函数。
  • converters:指定转换函数,用于对特定列进行类型转换。
  • true_values:指定要识别为True的值。
  • false_values:指定要识别为False的值。

下面是一些常用参数的使用方法的示例代码:

import pandas as pd

# 读取Excel文件
df = pd.read_excel("data.xlsx")

# 读取Excel文件并指定工作表名称和列名
df = pd.read_excel('data.xlsx', sheet_name='Sheet1', header=0, names=['col1', 'col2'])

# 指定要读取的列和行
df = pd.read_excel('data.xlsx', usecols=['col1', 'col2'], nrows=10)

# 解析日期
df = pd.read_excel('data.xlsx', parse_dates=['date'])

# 指定缺失值为-1
df = pd.read_excel('data.xlsx', na_values=['-1'])

2、TXT文件读取

使用Pandas读取Excel文件需要使用read_table()函数,下面是该函数的原型及参数介绍。

pd.read_table(filepath_or_buffer, sep='\t', delimiter=None, header='infer', names=None, index_col=None, usecols=None, dtype=None, engine=None, skiprows=None, skipfooter=None, skip_blank_lines=True, na_values=None, parse_dates=False, infer_datetime_format=False, keep_date_col=False, date_parser=None, nrows=None, encoding=None, squeeze=False)

下面是一些常用的参数及其介绍:

  • filepath_or_buffer:要读取的文件路径或文件对象。
  • sepdelimiter:指定分隔符。默认为制表符(\t)。
  • header:指定哪一行作为表头。默认为第一行,可传入整数或列表(如[0,1,2])。
  • names:如果文件中没有表头,则可以指定列名。可传入列表、元组或数组。
  • index_col:指定用作索引的列。可传入列的序号、列名或多列。
  • usecols:要读取的列。可传入列索引或列名,也可以为一个函数。
  • dtype:指定列的数据类型。可传入字典、numpy.dtype或callable对象。
  • skiprows:要跳过的行数。可传入行号或行号列表。
  • skipfooter:要跳过的末尾行数。仅适用于文本文件。
  • na_values:指定哪些值应被解释为缺失值。可传入字符串、列表或字典。
  • comment:指定注释符号,注释符号后面的内容将被忽略。可传入字符或字符列表。
  • parse_dates:解析日期。可传入布尔值、列表或字典。
  • keep_date_col:如果解析日期,则保留原始列。默认为False。
  • date_parser:自定义日期解析函数。可传入函数或可调用的对象。
  • nrows:要读取的行数。
  • skip_blank_lines:是否跳过空行。默认为True。
  • squeeze:如果数据只包含一列,则返回一个Series对象。
  • infer_datetime_format:是否自动推断日期格式。默认为False。
  • engine:使用的解析引擎。可传入c或python,默认为c。
  • encoding:指定编码格式。默认为None,自动推断编码。

下面是一些常用参数的使用方法的示例代码:

import pandas as pd

# 读取txt文件
df = pd.read_table("data.txt")

# 读取csv文件并指定分隔符和表头行
df = pd.read_table('data.csv', sep=',', header=0)

# 指定要读取的列和索引列
df = pd.read_table('data.txt', usecols=['col1', 'col2'], index_col='col1')

# 跳过前两行
df = pd.read_table('data.txt', skiprows=[0, 1])

# 解析日期
df = pd.read_table('data.txt', parse_dates=['date'])

# 指定缺失值为-1
df = pd.read_table('data.txt', na_values=['-1'])

3、CSV文件读取

使用Pandas读取CSV文件需要使用read_csv()函数,下面是该函数的原型及参数介绍。

pandas.read_csv(filepath_or_buffer: Union[str, pathlib.Path, IO[~AnyStr]], 
                sep=',', delimiter=None, header='infer', names=None, 
                index_col=None, usecols=None, squeeze=False, 
                prefix=None, mangle_dupe_cols=True, dtype=None, 
                engine=None, converters=None, true_values=None, 
                false_values=None, skipinitialspace=False, 
                skiprows=None, skipfooter=0, nrows=None, 
                na_values=None, keep_default_na=True, 
                na_filter=True, verbose=False, 
                skip_blank_lines=True, parse_dates=False, 
                infer_datetime_format=False, keep_date_col=False, 
                date_parser=None, dayfirst=False, 
                cache_dates=True, iterator=False, chunksize=None, 
                compression='infer', thousands=None, decimal='.', 
                lineterminator=None, quotechar='"', 
                quoting=csv.QUOTE_MINIMAL, escapechar=None, 
                comment=None, encoding=None, 
                dialect=None, error_bad_lines=True, 
                warn_bad_lines=True, on_bad_lines=None, 
                skipfooter_errors=False, doublequote=True, 
                delim_whitespace=False, low_memory=True, 
                memory_map=False, float_precision=None)

下面是一些常用的参数及其介绍:

  • filepath_or_buffer: 要读取的csv文件路径或文件对象。
  • sep: 分隔符,默认为逗号。
  • header: 指定哪一行作为列名,默认为第一行。
  • index_col: 指定哪一列作为行索引,默认为None。
  • usecols: 指定要读取哪些列,默认为读取所有列。
  • dtype: 指定每一列的数据类型。
  • na_values: 指定哪些字符串被视为缺失值,默认为None。

下面是一些常用参数的使用方法的示例代码:

import pandas as pd

# 读取csv文件,并指定第一行为列名
df = pd.read_csv('data.csv', header=0)

# 指定第一列为行索引
df = pd.read_csv('data.csv', index_col=0)

# 只读取某些列
df = pd.read_csv('data.csv', usecols=['col1', 'col3'])

# 指定每一列的数据类型
df = pd.read_csv('data.csv', dtype={'col1': str, 'col2': float, 'col3': int})

# 指定哪些字符串被视为缺失值
df = pd.read_csv('data.csv', na_values=['-', 'N/A'])

可以看出,CSV读取方式与Excel、TXT文件读取方式没有多少区别,但是要特别注意的是,CSV文件可以存储大规模的数据文件,比如单个数据文件大小可达数GB、数十GB,这个时候可以采用分块的方式进行读取。

import pandas ad pd
df = pd.read_csv('data.csv', sep=',', chunksize=50000, usecols=[3,4,10])
k = 0
for i in df:
    k += 1
    print('第' + str(k) + '次读取数据规模为:', len(i))
1次读取数据规模为:500002次读取数据规模为:500003次读取数据规模为:33699

二、常用函数介绍

Pandas包除了提供序列、数据框的数据存储及操作方法之外,还提供丰富的函数,比如一些常用的数据计算及处理函数,包括滚动计算函数、数据框合并函数、数据框关联函数等。

1、滚动计算函数

滚动计算函数是指在一定时间窗口内对数据进行计算,得出一个新的值。Pandas提供了许多滚动计算函数,包括rolling_mean、rolling_sum、rolling_std等等。

rolling_mean函数:可以计算数据序列在滚动窗口内的均值。

import pandas as pd

data = pd.Series([1, 2, 3, 4, 5])
rolling_mean = data.rolling(window=2).mean()
print(rolling_mean)
0    NaN
1    1.5
2    2.5
3    3.5
4    4.5
dtype: float64

rolling_sum函数:可以计算数据序列在滚动窗口内的总和。

import pandas as pd

data = pd.Series([1, 2, 3, 4, 5])
rolling_sum = data.rolling(window=2).sum()
print(rolling_sum)
0    NaN
1    3.0
2    5.0
3    7.0
4    9.0
dtype: float64

rolling_std函数:可以计算数据序列在滚动窗口内的标准差。

import pandas as pd

data = pd.Series([1, 2, 3, 4, 5])
rolling_std = data.rolling(window=2).std()
print(rolling_std)
0         NaN
1    0.707107
2    0.707107
3    0.707107
4    0.707107
dtype: float64

2、数据框合并函数

数据框合并函数是指将两个或多个数据框按照一定的条件合并为一个数据框。Pandas提供了许多数据框合并函数,包括concat、merge等等。

# 示例代码:按列合并两个数据框
import pandas as pd

df1 = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})
df2 = pd.DataFrame({'C': [7, 8, 9], 'D': [10, 11, 12]})
# 水平合并
result1 = pd.concat([df1, df2], axis=1)
# 垂直合并
result2 = pd.concat([df1, df2], axis=0)
print(result1)
print(result2)
   A  B  C   D
0  1  4  7  10
1  2  5  8  11
2  3  6  9  12

     A    B    C     D
0  1.0  4.0  NaN   NaN
1  2.0  5.0  NaN   NaN
2  3.0  6.0  NaN   NaN
0  NaN  NaN  7.0  10.0
1  NaN  NaN  8.0  11.0
2  NaN  NaN  9.0  12.0

3、数据框关联函数

数据框关联函数是指通过某些列将两个或多个数据框关联起来,得到一个新的数据框。Pandas提供了许多数据框关联函数,包括merge、join等等。

其中merge函数,其中包括内连接、左连接、右连接等操作。

merge函数可以将两个数据框按照某些列的值进行关联,得到一个新的数据框。具体用法为:

# 按照key列进行关联
pd.merge(left, right, on='key', how='inner')

其中,left和right为要关联的两个数据框,key为要关联的列名,how表示关联方式。

内连接:是关联方式中的一种,表示只保留左右两个数据框中都存在的key值对应的行。

import pandas as pd

left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value_left': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value_right': [5, 6, 7, 8]})

merged = pd.merge(left, right, on='key', how='inner')
print(merged)
  key  value_left  value_right
0   B           2            5
1   D           4            6

左连接:是关联方式中的一种,表示以左侧的数据框为主,保留左侧数据框中所有的key值,同时将右侧数据框中与左侧数据框中key值相同的行进行关联。如果右侧数据框中不存在与左侧数据框中key值相同的行,则将其余列填充为NaN。

import pandas as pd

left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value_left': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value_right': [5, 6, 7, 8]})

merged = pd.merge(left, right, on='key', how='left')
print(merged)
  key  value_left  value_right
0   A           1          NaN
1   B           2          5.0
2   C           3          NaN
3   D           4          6.0

右连接:是关联方式中的一种,表示以右侧的数据框为主,保留右侧数据框中所有的key值,同时将左侧数据框中与右侧数据框中key值相同的行进行关联。如果左侧数据框中不存在与右侧数据框中key值相同的行,则将其余列填充为NaN。

import pandas as pd

left = pd.DataFrame({'key': ['A', 'B', 'C', 'D'], 'value_left': [1, 2, 3, 4]})
right = pd.DataFrame({'key': ['B', 'D', 'E', 'F'], 'value_right': [5, 6, 7, 8]})

merged = pd.merge(left, right, on='key', how='right')
print(merged)
  key  value_left  value_right
0   B         2.0            5
1   D         4.0            6
2   E         NaN            7
3   F         NaN            8

你可能感兴趣的:(Python大数据分析与挖掘,pandas,python,数据分析)