使用 Pandas Dataframe / Python 清理 UTF-16 文本文件

clean a UTF-16 text file using Pandas Dataframe / Python

我有一个 UTF-16 编码的文本文件,看起来像

"Day;""name"";""age"";""money"""
"2021-04-01;""mona"";""27"";"""""
"2021-04-02;""Jan"";""29"";"""""
"2021-04-03;""Shan"";""25"";"""""

我想根据另一个答案将其转换为 pandas 数据帧我试过这个

# Just manually make the columns
cols = ['Day', 'name', 'age', 'money']
df = pd.DataFrame(columns=cols)

#df
#Empty DataFrame
#Columns: [Day, name, age, money]
#Index: []

# Read the CSV in to a list
import csv
data = []
with open('test.csv', 'r') as f:
    reader = csv.reader(f)
    # Skip the header since we already have column names
    next(reader)
    for row in reader:
        # List comprehension to edit the strings
        edited = [s.replace('"', '').split(';') for s in row][0]
        data.append(edited)
    
# Use our column names to make a new dataframe
df2 = df.append(pd.DataFrame(data, columns=cols))

但这行不通,我们在行中遇到错误(我们的想法是 trim 来自 .txt 文件的所有 ",然后在带有分隔符 ';' 的数据框中读取它)

edited = [s.replace('"', '').split(';') for s in row][0]

----list index out of range---

原因是如果我打印上面代码中的行,我们得到

['2021-04-01;"pqr";"15";""'] ['2021-04-02;"pqrs";"152";""'] ['2021-04-03;"pqrt";"152";""'] 

所以现在基本上所有的列都在 1 列内,上面的拆分代码不起作用。

我请求的解决方案应该类似于

    Day         name  age   money
0   2021-04-01  mona   27    NaN
1   2021-04-02  Jan    29    NaN
2   2021-04-03  Shan   25    NaN

任何人都可以帮助我,在此先感谢。

是的,这会很棘手,因为 ; 看起来像 " "...

您可能希望将所有 " 替换为 ,然后使用 io.StringIOpd.read_csv 将数据帧拆分为 ;

from io import StringIO as sio
import pandas as pd

your_file = sio(
    '''"Day;""name"";""age"";""money"""
"2021-04-01;""mona"";""27"";"""""
"2021-04-02;""Jan"";""29"";"""""
"2021-04-03;""Shan"";""25"";"""""
'''
)

read_all_once = your_file.read()
read_all_once = read_all_once.replace('"', "")

file_like = sio(read_all_once)
df = pd.read_csv(file_like, sep=';')

df:
    Day         name    age money
0   2021-04-01  mona    27  NaN
1   2021-04-02  Jan     29  NaN
2   2021-04-03  Shan    25  NaN