比列表追加方法更有效地组合Python Pandas Dataframe

horatio1701d

我一直必须执行以下操作,以通过处理单个json行的小型管道构建数据帧。有没有一种更有效的方法来执行此操作,而不是依赖于将它们附加到列表然后进行连接?另外,我什至不需要下面以“键”表示的列标签,但不确定如何在不出现数据框构造函数错误的情况下将其排除:

def readfiles(pattern, textfile):
    for line in open(textfile):
        try:
            parsed = ujson.loads(line.rstrip('\n').rstrip(','))
            if pattern in parsed:
                yield parsed
        except ValueError, e:
            pass

def convertodf(lines):
    dfs = []
    for line in lines:
        dfs.append(pd.DataFrame({'key1':line['value'],
                                       'key2':line['value']['value'],
                                       'key3':line['value'],
                                       'key4':line['value']['value'],
                                       'key5':line['value']['value']}))

    pd.concat(dfs, ignore_index=True).to_csv('testdf2.csv', index=False, header=None)

def main(pattern, filenames):
    lines = readfiles(pattern, filenames)
    convertodf(lines)

上述实现的真正酷的部分是,line ['value']元素之一实际上是一个逗号分隔的整数列表,例如[1,2,3],它最终会自动复制其他值,例如:

'key1' 'key2'
  1     california
  2     california
  3     california
        ...

这是我在unutbu的帮助下使用的最终工作版本。

def readfiles(pattern, filedir):
        for f in glob.glob(filedir+'*.zip'):
            try:
                with zipfile.ZipFile(f, 'r') as myzip:
                    for logfile in myzip.namelist():
                        for line in myzip.open(logfile):
                            try:
                                line = ujson.loads(line.rstrip('\n').rstrip(','))
                                if pattern in line:
                                    for i in line['key1']:
                                        yield i, line['key1']['key2'],\
                                    line['key3'], line['key4']['key5'],\
                                    line['key6']['key7']
                            except ValueError as err:
                                pass
            except zipfile.error, e:
                pass

def convertdfcsv(lines):
        df = pd.DataFrame.from_records(lines)
        df.to_csv('testdf2.csv', index=False, header=None)

def main(pattern):
        lines = readfiles(pattern)
        convertdf(lines)
算了吧

您可以使用DataFrame.from_records从行迭代器构建DataFrame一个显示from_records工作方式的简单示例是:

iterator = (item for item in [[1, 2, 3], [2, 3, 4, 5]])
df = pd.DataFrame.from_records(iterator,
                               columns=list('abcd'))
print(df)
#    a  b  c   d
# 0  1  2  3 NaN
# 1  2  3  4   5

根据您的情况,代码可能类似于:

def readfiles(pattern, filenames):
    for textfile in filenames:
        with open(textfile, 'rb') as f:
            for line in f:
                try:
                    line = ujson.loads(line.rstrip('\n').rstrip(','))
                    if pattern in line:
                        yield line['value'], line['value']['value'], line['value'], line['value']['value'], line['value']['value']
                except ValueError as err:
                    pass

def convertodf(lines):
    df = pd.DataFrame.from_records(lines)
    df.to_csv('testdf2.csv', index=False, header=None)

def main(pattern, filenames):
    lines = readfiles(pattern, filenames)
    convertodf(lines)

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在Python中更有效(更快)地将大量的Yaml文件读入pandas dataframe中

来自分类Dev

如何有效地在Pandas DataFrame上映射转换

来自分类Dev

Pandas DataFrame有效地将一列拆分为多个

来自分类Dev

如何有效地将行添加到具有缺失值的pandas DataFrame?

来自分类Dev

有效地使用Pandas系列,Numpy数组和Python列表

来自分类Dev

如何使用for循环更有效地编写pandas命令

来自分类Dev

使用来自另一个 DataFrame 的值有效地将列添加到 Pandas DataFrame

来自分类Dev

避免 Pandas DataFrame for 循环的有效方法

来自分类Dev

Python Pandas Dataframe有效更新值

来自分类Dev

有效地检查与 Pandas DataFrame 中某些值匹配的行并将其添加到另一个数据框中

来自分类Dev

Pandas-使用pandas.Series.all筛选DataFrame的最有效方法是什么

来自分类Dev

pandas groupby:有效地构建多个列

来自分类Dev

Pandas Dataframe 更快的方法

来自分类Dev

Python:在pandas GroupBy对象上有效地应用

来自分类Dev

Python Pandas:有效地为切片赋值

来自分类Dev

Pandas Dataframe列到python列表

来自分类Dev

Python Pandas Dataframe追加行

来自分类Dev

Python Pandas Dataframe追加行

来自分类Dev

Pandas DataFrame-有效计数值之间的行

来自分类Dev

Pandas DataFrame-有效计数值之间的行

来自分类Dev

对 Pandas Dataframe 中加权平均变量的有效评估

来自分类Dev

迭代groupby Pandas数据框的更有效方法?

来自分类Dev

从DataFrame列表访问Pandas DataFrame对象

来自分类Dev

从DataFrame列表访问Pandas DataFrame对象

来自分类Dev

在Pandas DataFrame中转换列值的最有效方法

来自分类Dev

快速有效的方法从大型Pandas DataFrame中删除行

来自分类Dev

循环遍历Pandas Dataframe以创建虚拟变量(1或0输入)的有效方法

来自分类Dev

循环遍历Pandas Dataframe的有效方法以创建虚拟变量(1或0输入)

来自分类Dev

如何更有效地使用`other`作为异常处理程序在pandas数据帧上制作基于txt的关键字提取器

Related 相关文章

  1. 1

    有没有一种方法可以在Python中更有效(更快)地将大量的Yaml文件读入pandas dataframe中

  2. 2

    如何有效地在Pandas DataFrame上映射转换

  3. 3

    Pandas DataFrame有效地将一列拆分为多个

  4. 4

    如何有效地将行添加到具有缺失值的pandas DataFrame?

  5. 5

    有效地使用Pandas系列,Numpy数组和Python列表

  6. 6

    如何使用for循环更有效地编写pandas命令

  7. 7

    使用来自另一个 DataFrame 的值有效地将列添加到 Pandas DataFrame

  8. 8

    避免 Pandas DataFrame for 循环的有效方法

  9. 9

    Python Pandas Dataframe有效更新值

  10. 10

    有效地检查与 Pandas DataFrame 中某些值匹配的行并将其添加到另一个数据框中

  11. 11

    Pandas-使用pandas.Series.all筛选DataFrame的最有效方法是什么

  12. 12

    pandas groupby:有效地构建多个列

  13. 13

    Pandas Dataframe 更快的方法

  14. 14

    Python:在pandas GroupBy对象上有效地应用

  15. 15

    Python Pandas:有效地为切片赋值

  16. 16

    Pandas Dataframe列到python列表

  17. 17

    Python Pandas Dataframe追加行

  18. 18

    Python Pandas Dataframe追加行

  19. 19

    Pandas DataFrame-有效计数值之间的行

  20. 20

    Pandas DataFrame-有效计数值之间的行

  21. 21

    对 Pandas Dataframe 中加权平均变量的有效评估

  22. 22

    迭代groupby Pandas数据框的更有效方法?

  23. 23

    从DataFrame列表访问Pandas DataFrame对象

  24. 24

    从DataFrame列表访问Pandas DataFrame对象

  25. 25

    在Pandas DataFrame中转换列值的最有效方法

  26. 26

    快速有效的方法从大型Pandas DataFrame中删除行

  27. 27

    循环遍历Pandas Dataframe以创建虚拟变量(1或0输入)的有效方法

  28. 28

    循环遍历Pandas Dataframe的有效方法以创建虚拟变量(1或0输入)

  29. 29

    如何更有效地使用`other`作为异常处理程序在pandas数据帧上制作基于txt的关键字提取器

热门标签

归档