如何按 Python 中的位置分隔 CSV 列
How to separate a CVS column by position in Python
我想将数据分成 3 列,形成 CVS 文件中的一列。
原始文件如下所示:
0400000006340000000000965871
0700000007850000000000336487
0100000003360000000000444444
我想将列分开以类似于下面的列表,同时仍保留前导零:
04 0000000634 0000000000965871
07 0000000785 0000000000336487
01 0000000336 0000000000444444
我可以将文件上传到 Python,但我不知道必须使用哪个定界符或定位。到目前为止我的代码:
import pandas as pd
df = pd.read_cvs('new_numbers.txt', header=None)
感谢您的帮助。
好像没有定界符,您使用的是固定长度。
按列表符号中的位置访问固定长度。
例如:
str1 = "0400000006340000000000965871"
str1A = str1[:2]
str1B = str1[3:14]
str1C = str1[14:]
除非您需要远端的数据帧,否则我不会特别在意 pandas。
您不需要 pandas 加载您的文本文件并读取其内容(而且,您没有加载 csv 文件)。
with open("new_numbers.txt") as f:
lines = f.readlines()
我建议你使用 re
模块。
import re
PATTERN = re.compile(r"(0*[1-9]+)(0*[1-9]+)(0*[1-9]+)")
您可以 check here 您的示例中此表达式的结果。
然后你需要从你的行中获取匹配项,并用 space.
加入它们
matches = []
for line in lines:
match = PATTERN.match(line)
first, second, third = match.group(1, 2, 3)
matches.append(" ".join([first, second, third]))
最后,matches
将是一个由 space 分隔的数字(带前导零)的数组。
此时你可以将它们写入另一个文件,或者用它做任何你需要做的事情。
towrite = "\n".join(matches)
with open("output.txt", "w") as f:
f.write(towrite)
使用 pandas read_fwf()
方法 - 代表“固定宽度格式”:
pd.read_fwf('new_numbers.txt', widths=[2, 10, 16], header=None)
这将删除前导零:
0 1 2
0 4 634 965871
1 7 785 336487
2 1 336 444444
要保留它们,请将 dtype
指定为带有 object
:
的字符串
pd.read_fwf('new_numbers.txt', widths=[2, 10, 16], dtype=object, header=None)
输出:
0 1 2
0 04 0000000634 0000000000965871
1 07 0000000785 0000000000336487
2 01 0000000336 0000000000444444
我想将数据分成 3 列,形成 CVS 文件中的一列。 原始文件如下所示:
0400000006340000000000965871
0700000007850000000000336487
0100000003360000000000444444
我想将列分开以类似于下面的列表,同时仍保留前导零:
04 0000000634 0000000000965871
07 0000000785 0000000000336487
01 0000000336 0000000000444444
我可以将文件上传到 Python,但我不知道必须使用哪个定界符或定位。到目前为止我的代码:
import pandas as pd
df = pd.read_cvs('new_numbers.txt', header=None)
感谢您的帮助。
好像没有定界符,您使用的是固定长度。
按列表符号中的位置访问固定长度。
例如:
str1 = "0400000006340000000000965871"
str1A = str1[:2]
str1B = str1[3:14]
str1C = str1[14:]
除非您需要远端的数据帧,否则我不会特别在意 pandas。
您不需要 pandas 加载您的文本文件并读取其内容(而且,您没有加载 csv 文件)。
with open("new_numbers.txt") as f:
lines = f.readlines()
我建议你使用 re
模块。
import re
PATTERN = re.compile(r"(0*[1-9]+)(0*[1-9]+)(0*[1-9]+)")
您可以 check here 您的示例中此表达式的结果。
然后你需要从你的行中获取匹配项,并用 space.
加入它们matches = []
for line in lines:
match = PATTERN.match(line)
first, second, third = match.group(1, 2, 3)
matches.append(" ".join([first, second, third]))
最后,matches
将是一个由 space 分隔的数字(带前导零)的数组。
此时你可以将它们写入另一个文件,或者用它做任何你需要做的事情。
towrite = "\n".join(matches)
with open("output.txt", "w") as f:
f.write(towrite)
使用 pandas read_fwf()
方法 - 代表“固定宽度格式”:
pd.read_fwf('new_numbers.txt', widths=[2, 10, 16], header=None)
这将删除前导零:
0 1 2
0 4 634 965871
1 7 785 336487
2 1 336 444444
要保留它们,请将 dtype
指定为带有 object
:
pd.read_fwf('new_numbers.txt', widths=[2, 10, 16], dtype=object, header=None)
输出:
0 1 2
0 04 0000000634 0000000000965871
1 07 0000000785 0000000000336487
2 01 0000000336 0000000000444444