Python 读取csv空间的倍数
我在csv文件中有一个非常相似的数据集,有两列 例如: 在第一行和第一列中 项目:“Betarlaga paquete 5大学” 在第一行和第二列中 数量:1 我喜欢与熊猫一起阅读,但使用:Python 读取csv空间的倍数,python,pandas,Python,Pandas,我在csv文件中有一个非常相似的数据集,有两列 例如: 在第一行和第一列中 项目:“Betarlaga paquete 5大学” 在第一行和第二列中 数量:1 我喜欢与熊猫一起阅读,但使用: df1 = pd.read_csv(r'pedidos4.csv',sep='\s+',encoding='utf-8',error_bad_lines=False) 这只返回2列,但第一列输入中的第一个单词作为rowname 我能够准确地阅读你作为两列发布的文本块。请尝试使用sep='\
df1 = pd.read_csv(r'pedidos4.csv',sep='\s+',encoding='utf-8',error_bad_lines=False)
这只返回2列,但第一列输入中的第一个单词作为rowname
我能够准确地阅读你作为两列发布的文本块。请尝试使用
sep='\s\s+'
之后,您可以编写一个函数,该函数接收一行,检查qty
是否为null
,修复qty
列和Item
列并返回该行。然后您可以将其应用于df
overaxis=1
我能够准确地阅读你作为两列发布的文本块。请尝试使用
sep='\s\s+'
之后,您可以编写一个函数,该函数接收一行,检查qty
是否为null
,修复qty
列和Item
列并返回该行。然后您可以将其应用于df
overaxis=1
我假设您希望每行的最后一个元素是第2列,其余元素在第1列。因此,您可能必须手动执行此操作,因为不同行的空白量不一致,而且我认为标准的
read\u csv
方法不容易实现。因此,这里有一个替代方案
这是我们的数据
file = StringIO(
"""Item qty
Betarraga paquete 5 unidades 1
Betarraga paquete 5 unidades 2
Betarraga paquete 5 unidades 1
Betarraga paquete 5 unidades 1
CANASTA PEQUEÑA 1
Cebolla Nueva 20 unidades 1
Cebolla Nueva 20 unidades 2
Cebolla Nueva 20 unidades 1
Cebollin atado de 3 2
Cebollin atado de 3 2
Cebollin atado de 3 3
Cebollin atado de 3 1
Cebollin atado de 3 1
Cebollin atado de 3 1
Cebollin atado de 3 1
""")
#If 'myfile.txt' is where this data is, you should replace the above with
# file = open('myfile.txt', 'r')
然后我们逐行读取文件
,在空白处拆分行,使用最后一个标记作为第2列,其余标记作为第1列,并粘贴在数据帧中
col1 = []
col2 = []
for line in file:
tokens = line.split()
c1 = ' '.join(tokens[:-1])
c2 = tokens[-1]
col1.append(c1)
col2.append(c2)
df = pd.DataFrame({col1[0] : col1[1:], col2[0] : col2[1:]})
df['qty'] = df['qty'].astype(int)
df
产生
Item qty
-- ---------------------------- -----
0 Betarraga paquete 5 unidades 1
1 Betarraga paquete 5 unidades 2
2 Betarraga paquete 5 unidades 1
3 Betarraga paquete 5 unidades 1
4 CANASTA PEQUEÑA 1
5 Cebolla Nueva 20 unidades 1
6 Cebolla Nueva 20 unidades 2
7 Cebolla Nueva 20 unidades 1
8 Cebollin atado de 3 2
9 Cebollin atado de 3 2
10 Cebollin atado de 3 3
11 Cebollin atado de 3 1
12 Cebollin atado de 3 1
13 Cebollin atado de 3 1
14 Cebollin atado de 3 1
我假设您希望每行的最后一个元素是第2列,其余元素在第1列。因此,您可能必须手动执行此操作,因为不同行的空白量不一致,而且我认为标准的
read\u csv
方法不容易实现。因此,这里有一个替代方案
这是我们的数据
file = StringIO(
"""Item qty
Betarraga paquete 5 unidades 1
Betarraga paquete 5 unidades 2
Betarraga paquete 5 unidades 1
Betarraga paquete 5 unidades 1
CANASTA PEQUEÑA 1
Cebolla Nueva 20 unidades 1
Cebolla Nueva 20 unidades 2
Cebolla Nueva 20 unidades 1
Cebollin atado de 3 2
Cebollin atado de 3 2
Cebollin atado de 3 3
Cebollin atado de 3 1
Cebollin atado de 3 1
Cebollin atado de 3 1
Cebollin atado de 3 1
""")
#If 'myfile.txt' is where this data is, you should replace the above with
# file = open('myfile.txt', 'r')
然后我们逐行读取文件
,在空白处拆分行,使用最后一个标记作为第2列,其余标记作为第1列,并粘贴在数据帧中
col1 = []
col2 = []
for line in file:
tokens = line.split()
c1 = ' '.join(tokens[:-1])
c2 = tokens[-1]
col1.append(c1)
col2.append(c2)
df = pd.DataFrame({col1[0] : col1[1:], col2[0] : col2[1:]})
df['qty'] = df['qty'].astype(int)
df
产生
Item qty
-- ---------------------------- -----
0 Betarraga paquete 5 unidades 1
1 Betarraga paquete 5 unidades 2
2 Betarraga paquete 5 unidades 1
3 Betarraga paquete 5 unidades 1
4 CANASTA PEQUEÑA 1
5 Cebolla Nueva 20 unidades 1
6 Cebolla Nueva 20 unidades 2
7 Cebolla Nueva 20 unidades 1
8 Cebollin atado de 3 2
9 Cebollin atado de 3 2
10 Cebollin atado de 3 3
11 Cebollin atado de 3 1
12 Cebollin atado de 3 1
13 Cebollin atado de 3 1
14 Cebollin atado de 3 1
如果您使用
sep='\t'
?只返回一列检查我的更新答案和修复。如果您使用sep='\t'
?只返回一列检查我的更新答案和修复。在第4、8、9、10、11、12、13和14行中,数量不是NaN,最后一个数字是qtyright,这是因为您的某些行具有多个空格,而其他行具有单个空格。您可以使用apply函数来解决这个问题。在Quantity的第4、8、9、10、11、12、13和14行中,不是NaN,最后一个数字是qtyright,这是因为您的一些行有多个空格,而其他行有单个空格。您可以使用apply函数修复该问题。
col1 = []
col2 = []
for line in file:
tokens = line.split()
c1 = ' '.join(tokens[:-1])
c2 = tokens[-1]
col1.append(c1)
col2.append(c2)
df = pd.DataFrame({col1[0] : col1[1:], col2[0] : col2[1:]})
df['qty'] = df['qty'].astype(int)
df
Item qty
-- ---------------------------- -----
0 Betarraga paquete 5 unidades 1
1 Betarraga paquete 5 unidades 2
2 Betarraga paquete 5 unidades 1
3 Betarraga paquete 5 unidades 1
4 CANASTA PEQUEÑA 1
5 Cebolla Nueva 20 unidades 1
6 Cebolla Nueva 20 unidades 2
7 Cebolla Nueva 20 unidades 1
8 Cebollin atado de 3 2
9 Cebollin atado de 3 2
10 Cebollin atado de 3 3
11 Cebollin atado de 3 1
12 Cebollin atado de 3 1
13 Cebollin atado de 3 1
14 Cebollin atado de 3 1