【问题标题】:upload text file to pandas data frame将文本文件上传到熊猫数据框
【发布时间】:2020-07-16 01:43:52
【问题描述】:

我在处理我之前做过几次的过程时遇到了问题。我是 Python 和 Jupyter 笔记本的新用户,我正在尝试转换包含以下数据的文本文件:(25k 列表):

[X,
Y],
[Z,
X,
Y,
Z],

这是文件结构,我正在尝试使用以下代码将其转换为 pandas 数据帧(宽列存储):

import pandas as pd
import ast
import json 

data = open("C:/Users/itamar/Desktop/SuperMushlam/How To Use Apriori Algorithm A-Z/sss.txt", 'r', encoding = 'windows-1255', errors='ignore').read().replace("\r","").replace("\n","")

remove_doulequotes = data.replace('""', '').replace('"', '')

list_of_str = list(map(lambda x: '"{x}"'.format(x=x), remove_doulequotes.split(",")))

final_data = ", ".join(list_of_str).replace('"[[', '[["').replace(']"','"]').replace(']]"', '"]]').replace('"[', '["').replace(']"]', '"]]')

data_in_list = ast.literal_eval(final_data)

df = pd.DataFrame(data_in_list)

df

它以前工作过,所以我试图了解在此过程中我的问题在哪里。 这是我收到的错误消息:

    ---------------------------------------------------------------------------
MemoryError                               Traceback (most recent call last)
<ipython-input-10-d41ed8f6586e> in <module>
     11 final_data = ", ".join(list_of_str).replace('"[[', '[["').replace(']"','"]').replace(']]"', '"]]').replace('"[', '["').replace(']"]', '"]]')
     12 
---> 13 data_in_list = ast.literal_eval(final_data)
     14 
     15 df = pd.DataFrame(data_in_list)

~\Anaconda3\lib\ast.py in literal_eval(node_or_string)
     44     """
     45     if isinstance(node_or_string, str):
---> 46         node_or_string = parse(node_or_string, mode='eval')
     47     if isinstance(node_or_string, Expression):
     48         node_or_string = node_or_string.body

~\Anaconda3\lib\ast.py in parse(source, filename, mode)
     33     Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
     34     """
---> 35     return compile(source, filename, mode, PyCF_ONLY_AST)
     36 
     37 

MemoryError: 

有什么建议吗?我不确定我的问题在哪里。非常感谢!

这就是我需要的:

【问题讨论】:

  • 您能否用一个示例来更新这个问题,说明您希望在 DataFrame 上运行此代码后的样子?比如文件中的每个列表会是一行还是一列或其他什么?
  • 嘿,当然。正如我所写的,我需要一个widecolumnstore,每个列表都是一行,每个值都是一个单元格。我现在就编辑它

标签: python pandas list dataframe text


【解决方案1】:

假设您的整个文本文件与您描述的模式匹配:

[X,
Y],
[Z,
X,
Y,
Z],

您也许可以通过以下代码构建您正在寻找的 DataFrame:

import pandas as pd

df_l = []
tmp_l = []
filename = "C:/Users/itamar/Desktop/SuperMushlam/How To Use Apriori Algorithm A-Z/sss.txt"
with open(filename) as f:
    for line in f:
        value = ''.join([c for c in line if c not in '[ ] ,'.split()]).strip('\n')
        value = float(value) if value.replace('.','',1).isdigit() else value
        tmp_l.append(value)
        if ']' in line:
            df_l.append(pd.DataFrame(tmp_l).T)
            tmp_l = []

df = pd.concat(df_l, ignore_index=True)
print(df)

输出:

   0  1    2    3
0  X  Y  NaN  NaN
1  Z  X    Y    Z

Process finished with exit code 0

上述解决方案创建了一个单行 DataFrame (df_l) 列表,其中每个 DataFrame 都是从 .txt 文件中的每个列表创建的。他们使用pd.concatdf_l 中的所有这些一行DataFrames 加入到一个df 中。此解决方案还假设 .txt 文件的每一行仅包含一个列表项,并且字符 "["",""]" 不包含在该列表项中。

【讨论】:

    猜你喜欢
    • 2020-06-03
    • 2015-11-14
    • 2014-04-12
    • 2017-03-21
    • 1970-01-01
    • 1970-01-01
    • 2019-06-24
    • 2021-12-27
    • 2020-07-18
    相关资源
    最近更新 更多