问题。如何在Python中把CSV文件导入到Pandas DataFrame中?

本文将讨论最有趣的例子,将CSV文件读取到Pandas DataFrame中。

如果没有特别说明,我们在所有的例子中都使用下面这个CSV文件。

**my_file.csv** :

Name,Job,Age,Income
Alice,Programmer,23,110000
Bob,Executive,34,90000
Carl,Sales,45,50000

让我们开始吧!

例子1 - CSV到数据框架

要将一个给定的CSV文件导入一个新创建的Pandas DataFrame,请使用pd.read_csv('my_file.csv') ,该函数返回一个以CSV文件中的内容创建的DataFrame'my_file.csv'

下面是一个快速和通用的代码片断,展示了这种方法。

import pandas as pd
df = pd.read_csv('my_file.csv')
print(df)
    Name         Job  Age  Income
0  Alice  Programmer   23  110000
1    Bob   Executive   34   90000
2   Carl       Sales   45   50000

你通过三个步骤将CSV文件转换为一个DataFrame。(1)导入pandas库,(2)使用 [pd.read_csv()](https://blog.finxter.com/read-and-write-flat-files-with-pandas/)并将文件名作为一个字符串参数传递,以及(3)打印生成的DataFrame(可选)。

  • import pandas as pd
  • df = pd.read_csv('my_file.csv')
  • print(df)
  • 例2--从CSV中导入特定的列

    如果你想导入CSV中的某一特定列,请使用参数usecols=['column_name']

    下面的例子只使用这种方法读取列'Name'

    import pandas as pd
    df = pd.read_csv('my_file.csv', usecols= ['Name'])
    print(df)
    0  Alice
    1    Bob
    2   Carl
    

    例3--从CSV中导入子集的列

    如果你想从CSV中导入一个子集的列,使用参数usecols= ['column_name_1','column_name_2']

    import pandas as pd
    df = pd.read_csv('my_file.csv', usecols= ['Name','Age'])
    print(df)
    
        Name  Age
    0  Alice   23
    1    Bob   34
    2   Carl   45
    

    例4 - 为CSV文件使用自定义分隔符

    你可以通过添加可选的参数sep ,为CSV文件指定一个自定义分隔符。

  • 要使用表格分隔符,请使用sep='\t' ,作为pd.read_csv() 的参数。
  • 要使用分号分隔符,请使用sep=';' ,作为pd.read_csv() 的参数。
  • pd.read_csv() 的默认分隔符参数是sep=','
  • import pandas as pd
    df = pd.read_csv('my_file.csv', sep='\t')
    print(df)
    

    如果在文件'my_file.csv' 中使用表格字符作为分隔符,本例将生成与例1中已显示的相同的DataFrame。

        Name         Job  Age  Income
    0  Alice  Programmer   23  110000
    1    Bob   Executive   34   90000
    2   Carl       Sales   45   50000
    

    例5 - 读取带有自定义标题的CSV文件

    默认情况下,CSV文件的第一行将被df.read_csv() 函数作为DataFrame的标题。

    要将CSV文件读入带有自定义页眉的DataFrame,请调用pd.read_csv("my_file.csv", skiprows=1, names=column_names)

  • skiprows=1 确保你将跳过包含默认列名的第一行。我们将在下面更详细地探讨这个问题。
  • names=column_names 将存储在变量中的列名作为一个列表传给 。这些是新创建的DataFrame的新列名(=headers)。['Spouse', 'Former Job', 'Insta Followers', 'Insta Likes']
  • 下面是一个例子。

    import pandas as pd
    column_names = ['Spouse', 'Former Job', 'Insta Followers', 'Insta Likes']
    df = pd.read_csv("my_file.csv", skiprows=1, names=column_names)
    print(df)
    
      Spouse  Former Job  Insta Followers  Insta Likes
    0  Alice  Programmer               23       110000
    1    Bob   Executive               34        90000
    2   Carl       Sales               45        50000
    

    例6 - 使用自定义标题跳过CSV的前n行

    import pandas as pd
    n = 2  # no. of rows to skip
    column_names = ['Spouse', 'Former Job', 'Insta Followers', 'Insta Likes']
    df = pd.read_csv("my_file.csv", skiprows=2, names=column_names)
    print(df)
    
      Spouse Former Job  Insta Followers  Insta Likes
    0    Bob  Executive               34        90000
    1   Carl      Sales               45        50000
    

    当设置skiprows=2 ,第一行(=原始标题)和第二行(=CSV的第一行)现在被跳过。

    例7 - 读取带有第i行标题的CSV文件

    要读取CSV文件,并在i-第1行设置页眉,你可以像这样把行索引i 作为页眉参数。pd.read_csv("my_file.csv", header = i).i-第1行现在将被作为新创建的DataFrame的列标题。

    下面的例子显示了如何将CSV读到DataFrame中,其标题在第二行,索引为i=1

    import pandas as pd
    i = 1    # header row index
    df = pd.read_csv("my_file.csv", header = i)
    print(df)
    
      Alice Programmer  23  110000
    0   Bob  Executive  34   90000
    1  Carl      Sales  45   50000
    

    在这个例子中,CSV的第二行被作为标题。第一行被完全忽略了。

    例子 8 - 读取没有页眉的CSV文件

    如果你在调用pd.read_csv("my_file.csv", header=None) 时指定header=None ,Python 将分配连续的整数值 (0, 1, 2, ...) 作为列名。

    import pandas as pd
    df = pd.read_csv("my_file.csv", header=None)
    print(df)
    
           0           1    2       3
    0   Name         Job  Age  Income
    1  Alice  Programmer   23  110000
    2    Bob   Executive   34   90000
    3   Carl       Sales   45   50000
    

    例 9 - 读取 CSV 自定义列头名称。前缀

    如果你在调用pd.read_csv("my_file.csv", header=None) 时指定header=None ,Python 将分配连续的整数值 (0, 1, 2, ...) 作为列名。

    如果你想批量修改列名,你可以额外指定前缀参数,即在每个连续的整数列名前插入一个前缀字符串。

    例如,prefix='Col_'header=None 结合使用,将产生列名。

  • 'Col_0'
  • 'Col_1'
  • 'Col_2'
  • 下面是代码规范。

    import pandas as pd
    df = pd.read_csv("my_file.csv", header=None, prefix='Col_')
    print(df)
    
       Col_0       Col_1 Col_2   Col_3
    0   Name         Job   Age  Income
    1  Alice  Programmer    23  110000
    2    Bob   Executive    34   90000
    3   Carl       Sales    45   50000
    

    例10--将特定值设置为NaN(缺失值)

    如果你想把CSV中的特定值设置为"非数字"(NaN),你可以使用列表参数na_values=[val_1, ...] ,该参数有一个元素,当CSV加载到DataFrame时,每个值都会被设置为NaN

    下面是一个将数值'Alice'23 设置为NaN 的例子。

    import pandas as pd
    df = pd.read_csv("my_file.csv", na_values=['Alice', 23])
    print(df)
    
       Name         Job   Age  Income
    0   NaN  Programmer   NaN  110000
    1   Bob   Executive  34.0   90000
    2  Carl       Sales  45.0   50000
    

    缺少的值用粗体字突出显示。

    例11--在URL上加载CSV到DataFrame中

    给出带有所需CSV文件位置的字符串URL(例如,"https://www.my_url.com/my_file.csv" )。你可以通过将URL作为pd.read_csv() 函数的第一个参数,而不是本地文件路径,将内容加载到DataFrame。

    Pandas会自动计算出这是一个URL。😉

    import pandas as pd
    df = pd.read_csv("https://www.my_url.com/my_file.csv")
    print(df)
    

    输出 - 假设CSV文件确实存在。

        Name         Job  Age  Income
    0  Alice  Programmer   23  110000
    1    Bob   Executive   34   90000
    2   Carl       Sales   45   50000
    

    例子12 - 跳过最后的i行加载CSV到DataFrame

    你可以通过在pd.read_csv() 函数中设置skipfooter=i 参数来跳过最后的i 行。CSV的第一行仍将是用于列名的标题。但是最后的i 行将从CSV中被忽略。

    下面是一个例子。

    import pandas as pd
    df = pd.read_csv("my_file.csv", skipfooter=2)
    print(df)
    
        Name         Job  Age  Income
    0  Alice  Programmer   23  110000
    

    第一行仍然被作为标题。但是最后的i=2 行被跳过,所以剩下的DataFrame只有一行。

    例13--加载CSV到DataFrame时忽略注释行

    假设你有一个带有一些注释的CSV文件(例如,以标签字符'#' 开始)。

    **'my_file.csv'**:

    Name,Job,Age,Income
    Alice,Programmer,23,110000
    # Ignore this line
    Bob,Executive,34,90000
    Carl,Sales,45,50000
    # This line is ignored too
    

    你可以加载CSV文件并忽略那些以特定 "注释字符"(如符号'#' )开始的行,方法是将参数comment='#' 传递给pd.read_csv() 函数。

    下面是一个例子。

    import pandas as pd
    df = pd.read_csv("my_file.csv", comment="#")
    print(df)
    

    输出是忽略了注释行的DataFrame。

        Name         Job  Age  Income
    0  Alice  Programmer   23  110000
    1    Bob   Executive   34   90000
    2   Carl       Sales   45   50000
    

    如果不设置注释参数,DataFrame将试图加载注释行,这在实际的代码项目中会产生非常奇怪的行为。

                             Name         Job   Age    Income
    0                       Alice  Programmer  23.0  110000.0
    1          # Ignore this line         NaN   NaN       NaN
    2                         Bob   Executive  34.0   90000.0
    3                        Carl       Sales  45.0   50000.0
    4  # This line is ignored too         NaN   NaN       NaN
    

    突出显示的行显然不是我们想要的行为,所以要相应地使用comment 参数来解决这个问题!

    例子14 - 测量导入CSV到DataFrame时的运行时间

    pd.read_csv() 函数的verbose=True 参数允许你测量加载一个CSV文件时的运行时间。

    对于小的CSV文件,由于高速的效率,耗费的运行时间将总是产生0。但对于性能要求高的项目或大规模的CSV文件,这个参数可以使你的生活更轻松

    import pandas as pd
    df = pd.read_csv("my_file.csv", verbose=True)
    print(df)
    
    Tokenization took: 0.00 ms
    Type conversion took: 0.00 ms
    Parser memory cleanup took: 0.00 ms
        Name         Job  Age  Income
    0  Alice  Programmer   23  110000
    1    Bob   Executive   34   90000
    2   Carl       Sales   45   50000
    

    在我们的案例中,由于CSV文件较小,所以耗费的运行时间确实很快。但是对于更大的、真实世界的CSV文件,这可以让你对你的代码的瓶颈有一个很好的了解,以便进行性能分析

    例子15--Pandas DataFrame到CSV

    给出一个Pandas DataFrame。如何将其保存在CSV文件中?

    你可以将一个列表转换为 PandasDataFrame,为你提供强大的功能,如to_csv() 方法。这是最简单的方法,它可以让你避免导入另一个库(反正我在很多Python项目中使用Pandas)。

    salary = [['Alice', 'Data Scientist', 122000],
              ['Bob', 'Engineer', 77000],
              ['Ann', 'Manager', 119000]]
    import pandas as pd
    df = pd.DataFrame(salary)
    df.to_csv('file2.csv', index=False, header=False)
    
    # file2.csv
    Alice,Data Scientist,122000
    Bob,Engineer,77000
    Ann,Manager,119000
    

    例子16 - CSV转数据框架 设置特定值为真

    你可以在加载CSV文件到DataFrame时,通过定义true_values 参数,将特定的值设置为True 。只需在pd.read_csv() 函数中传递一个要作为True 的值的列表。

    例如,true_values=['Alice', 'Bob'] 将在DataFrame中把每个出现的'Alice''Bob' 设置为True

    import pandas as pd
    df = pd.read_csv("my_file.csv", true_values=['Alice', 'Bob'])
    print(df)
    
        Name         Job  Age  Income
    0  True  Programmer   23  110000
    1    True   Executive   34   90000
    2   Carl       Sales   45   50000
    

    例子17 - CSV到DataFrame 设置特定值为假值

    你可以通过定义false_values 参数,在加载CSV文件到DataFrame时,将特定的值设置为False 。只需在pd.read_csv() 函数中传递一个要作为False 的值的列表。

    例如,false_values=['Alice', 'Bob'] 将在DataFrame中把每个出现的'Alice''Bob' 设置为False

    import pandas as pd
    df = pd.read_csv("my_file.csv", false_values=['Alice', 'Bob'])
    print(df)
    
        Name         Job  Age  Income
    0  False  Programmer   23  110000
    1    False   Executive   34   90000
    2   Carl       Sales   45   50000
    

    幽默的程序员

    深度学习算法得到的大部分积极反馈都是讽刺性的时候,就很难训练它们。

    分类:
    人工智能
    标签: