【问题标题】:Pandas : Get Data from a csv file irrespective of Header positionPandas:从 csv 文件中获取数据,而不考虑标题位置
【发布时间】:2014-11-11 03:15:15
【问题描述】:

我有 csv 文件,我必须使用 panda 制作 dataframes。 通常文件的格式如下:

Days    Page Impressions    Visits  Bounces
2012-12-15  692041  87973   31500
2012-12-16  602356  78663   29298
2012-12-17  730902  99356   37436
2012-12-18  730071  97844   37199
2012-12-19  774964  110446  43858
2012-12-20  419256  44592   13961
2012-12-21  320966  33692   10076
2012-12-22  200992  18840   5170


我面临的问题是有时 CSV 文件是这样的:

SomeName ABCD           
Account: AccountHolder Name         
Report Author: Analysis         
Description: Some variable length description       

Pivot           

Pivot           
Days    Page Impressions    Visits  Bounces
2012-12-15  367143  69147   30222
2012-12-16  334675  63702   28040
2012-12-17  409260  77171   33642
2012-12-18  427765  78221   33575
2012-12-19  434781  79850   34300
2012-12-20  463448  81361   34501
2012-12-21  447964  81897   35242
2012-12-22  368477  70352   31014
2012-12-23  321891  61973   27521

Time of Calculation: 2013-03-15 02:14:58            

如何仅获取与天数、页面展示次数、访问次数、跳出次数

列相关的数据

我知道我可以使用list(my_dataframe.columns.values) 来获取标题名称,但它不适用于 CSV 文件类型 2。

他们是否有任何现有的 Pythonic 方式在 pandas 中执行此操作?
谢谢

【问题讨论】:

  • 可能最容易编写单独的脚本来清理数据,跳过没有有效值的行。
  • 一种动态的方法是尝试读取 csv,如果有错误,请继续增加 skiprows 参数直到它工作,不幸的是这不会是万无一失的,在这种情况下你必须解析在确定要跳过的行数之前先解析结果或解析标题

标签: python csv pandas dataframe


【解决方案1】:

分两次读取文件。首先枚举文件中的行以获取标题所在的行。将该行号传递给 csv 解析器 skiprows arg。

with open('file.csv', 'rb') as infile:
    for lineno, line in enumerate(infile):
        if line[:4] = 'Days':
            break

df = pd.read_csv('file.csv', skiprows=lineno)

【讨论】:

    【解决方案2】:

    使用pandas.io.parsers.read_csv。它有一个选项“skiprows”。如果您的文件在标题中始终具有相同的 6 行,则可以使用 skiprows=6

    skiprows : 类列表或整数 文件开头要跳过的行号(0-indexed)或要跳过的行数(int) 即:

    import pandas as pd
    df = pd.read_cs("path/to/file.csv", sep=";", skiprows=6)
    

    【讨论】:

    • 这就是问题所在,非相关数据行数不固定。
    • 在这种情况下,也许您可​​以先尝试将所有行读入列表并丢弃您不感兴趣的行。比您可以做的 pd.DataFrame.from_records()
    【解决方案3】:

    您也可以使用 pandas read_csv 中的变量。

    在你的情况下,它看起来像:

    import pandas as pd
    df = pd.read_csv(file,header = 6 )
    

    所以您的脚本将使用第 6 行作为标题,然后开始读取数据...

    【讨论】:

      猜你喜欢
      • 2020-09-15
      • 1970-01-01
      • 2015-07-13
      • 1970-01-01
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2015-10-09
      • 2018-11-12
      相关资源
      最近更新 更多