【问题标题】:Creating a DataFrame from a .txt file从 .txt 文件创建 DataFrame
【发布时间】:2021-02-07 20:22:02
【问题描述】:

我需要一些智慧!

我正在尝试创建一个脚本,该脚本需要两 (2) 个具有相同格式的 .txt 文件,将一个附加到另一个,然后从该结果文件创建一个 DataFrame,以便我可以对其进行操作。

文件是库存结果,但有点乱。

从这些文件中,我只需要产品的行,仅此而已,我正在使用:

listados = ["analisis_diferencias.txt","no_contadas.txt"]

def unir_listados(listados):
    with open("df_final.txt","w+") as merge:
        for item in listados:
            with open(item) as readable:
                for line in readable:
                    if line[4] in ["1","2","3","4","5","6","7","8","9"]:
                        merge.write(line)
    

结果是一个看起来很完美的新 .txt,因为它只使用有产品代码的行。

但我无法将其转换为普通的 DataFrame 或任何其他具有列的结构。

我最远的地方是使用 pd.read_table 创建一个单列 df,不知道如何分隔列上的每一行。

我尝试用“;”替换空格所以我可以稍后删除它会生成的空列,但后来我得到了一个包含一行和超过 6k 列的巨大列表......

也尝试将它们替换为“\t”,但没有。

pd.read_csv 方法也不起作用:

a = pd.read_csv("df_final.txt", header=None, encoding="latin-1")

ParserError:预计第 3 行中有 18 个字段,看到 19 个。错误可能 可能是由于在使用多字符定界符时忽略了引号 用过。

我在网上看到一个解决方案,它不是创建一个新的 .txt,而是在解析原始 .txt 的每一行时按值创建一个新的 df 值

但我知道,一旦您按照我现在的方式显示数据,应该有一个更简单的方法。

提前感谢您提供的任何帮助。

Ps:顺便说一句,将行附加到我的新 .txt 时,如果我使用 str([1,2,3,4,5,6,7,8,9]) 它会选择每一行,因为它检测到空字符串 char "" 在数组中。对此有什么想法吗?

编辑:

我根据要求添加了一些最终的 .txt 行。

68.17.28   D-AA SPLIT HAIER TUNDRA AS-18 ]          0          1             1              562,00      562,000
42.50.10   Z-CAMARA INSTANT. FUJI INSTAX ]          1          3             2              111,80       55,900
54.15.88   Z-CAMARA INSTANT. FUJI INSTAX ]          2          2             0                0,00       59,900
67.05.04   A-CAMARA INSTANT. FUJI INSTAX ]          1          1             0                0,00       54,500
72.29.13   C-CAMARA INSTANT. FUJI INSTAX ]          1          1             0                0,00      121,950
21.08.75   D-MEMORIA MICRO SD ULTRA SANDI]          7          7             0                0,00       15,699
21.09.35   B-MEMORIA MICRO SD ULTRA SANDI]         16         16             0                0,00        3,616
21.09.70   D-MEMORIA MICRO SD ULTRA SANDI]         11         23            12               56,18        4,682
21.11.33   D-MEMORIA MICRO SD ULTRA SANDI]          4          4             0                0,00        7,830
23.36.92   A-MICROSD SAMSUNG EVO 32GB(MB-]          9          9             0                0,00        6,811

【问题讨论】:

  • 可以分享一下df_final.txt文件的前十行吗?
  • 完成,我刚刚添加了它们

标签: python pandas dataframe import


【解决方案1】:

没有文本文件的样本,很难确定。但是你能不能试试:

pd.read_table("df_final.txt", sep='\s+', header=None, encoding="latin-1")

这看起来是根据空格分隔 txt 文件列。

【讨论】:

  • 嗨,我收到了这个错误:ParserError: Error tokenizing data. C error: Expected 12 fields in line 62, saw 13 我相信每一行都是一个字符串,末尾有一个 \n 来开始新的一行。
  • 第 62 行是什么样的。这将有助于选择更合适的分隔符。
【解决方案2】:

使用分隔符\s{2,}怎么样,D-AA SPLIT HAIER TUNDRA AS-18 ]只有1个空格。

df = pd.read_csv(file, sep='\s{2,}',header=None, engine='python')

另一种方式:

# read file with only one column
obj = pd.read_csv(file, sep='\n',header=None)[0]

def handle_row(row):
    row_list = re.split(r'\s+', row)
    # the first 2 columns
    prt1 = ' '.join(row_list[:-5]).split(' ', maxsplit=1)
    # the last 5 columns
    prt2 = row_list[-5:]
    return (prt1 + prt2)
df = pd.DataFrame(obj.map(handle_row).tolist())


print(df)

             0                                1   2   3   4       5        6
    0  68.17.28  D-AA SPLIT HAIER TUNDRA AS-18 ]   0   1   1  562,00  562,000
    1  42.50.10  Z-CAMARA INSTANT. FUJI INSTAX ]   1   3   2  111,80   55,900
    2  54.15.88  Z-CAMARA INSTANT. FUJI INSTAX ]   2   2   0    0,00   59,900
    3  67.05.04  A-CAMARA INSTANT. FUJI INSTAX ]   1   1   0    0,00   54,500
    4  72.29.13  C-CAMARA INSTANT. FUJI INSTAX ]   1   1   0    0,00  121,950
    5  21.08.75  D-MEMORIA MICRO SD ULTRA SANDI]   7   7   0    0,00   15,699
    6  21.09.35  B-MEMORIA MICRO SD ULTRA SANDI]  16  16   0    0,00    3,616
    7  21.09.70  D-MEMORIA MICRO SD ULTRA SANDI]  11  23  12   56,18    4,682
    8  21.11.33  D-MEMORIA MICRO SD ULTRA SANDI]   4   4   0    0,00    7,830
    9  23.36.92  A-MICROSD SAMSUNG EVO 32GB(MB-]   9   9   0    0,00    6,811

【讨论】:

    猜你喜欢
    • 2019-09-27
    • 2021-07-12
    • 2017-05-14
    • 2013-09-02
    • 2020-04-09
    • 2021-08-19
    • 2021-12-08
    • 2021-07-21
    • 1970-01-01
    相关资源
    最近更新 更多