使用 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.StringIO
和 pd.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
我有一个 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.StringIO
和 pd.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