Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 对于不规则分隔符,如何使pandas read_csv中的分隔符更灵活地使用wrt空白?_Python_Csv_Pandas_Dataframe_Whitespace - Fatal编程技术网

Python 对于不规则分隔符,如何使pandas read_csv中的分隔符更灵活地使用wrt空白?

Python 对于不规则分隔符,如何使pandas read_csv中的分隔符更灵活地使用wrt空白?,python,csv,pandas,dataframe,whitespace,Python,Csv,Pandas,Dataframe,Whitespace,我需要通过使用read\u csv方法从文件中读取数据来创建数据帧。但是,分隔符不是很规则:一些列由制表符(\t)分隔,另一些列由空格分隔。此外,某些列可以由2个或3个或更多空格分隔,甚至可以由空格和制表符组合分隔(例如,3个空格、2个制表符和1个空格) 有没有办法告诉熊猫妥善处理这些文件 顺便说一下,如果我使用Python,就不会有这个问题。我使用: for line in file(file_name): fld = line.split() 它工作得很好。字段之间是否有2或3个空格

我需要通过使用
read\u csv
方法从文件中读取数据来创建数据帧。但是,分隔符不是很规则:一些列由制表符(
\t
)分隔,另一些列由空格分隔。此外,某些列可以由2个或3个或更多空格分隔,甚至可以由空格和制表符组合分隔(例如,3个空格、2个制表符和1个空格)

有没有办法告诉熊猫妥善处理这些文件

顺便说一下,如果我使用Python,就不会有这个问题。我使用:

for line in file(file_name):
   fld = line.split()
它工作得很好。字段之间是否有2或3个空格并不重要。即使是空格和制表符的组合也不会导致任何问题。pandas也可以这样做吗?

从中,您可以使用正则表达式或delim_空格:

>>> import pandas as pd
>>> for line in open("whitespace.csv"):
...     print repr(line)
...     
'a\t  b\tc 1 2\n'
'd\t  e\tf 3 4\n'
>>> pd.read_csv("whitespace.csv", header=None, delimiter=r"\s+")
   0  1  2  3  4
0  a  b  c  1  2
1  d  e  f  3  4
>>> pd.read_csv("whitespace.csv", header=None, delim_whitespace=True)
   0  1  2  3  4
0  a  b  c  1  2
1  d  e  f  3  4

将使用任意数量的空格和制表符的任意组合作为分隔符

>P>我们可以考虑所有的组合和零或更多的事件。

pd.read_csv("whitespace.csv", header = None, sep = "[ \t]*,[ \t]*")

Pandas有两个csv读卡器,仅在冗余前导空白方面灵活:

pd.read_csv("whitespace.csv", skipinitialspace=True)
而一个不是

pd.DataFrame.from_csv("whitespace.csv")

关于尾随空格,两者都不是现成的,请参见正则表达式的答案。避免使用delim_空格,因为它也只允许空格(不带空格或\t)作为分隔符。

您也可以使用
skipinitialspace
跳过初始空格。当我有一个
txt.file
和一个数字后跟至少两个空格的格式时,它是如何工作的?公式
delimiter=r”\d\d\s\s+
不适用work@PV8:在这种情况下,您的分隔符仍然只是
\s+
\s{2,}
。不要在分隔符中包含字段
\d\d
的表达式!分隔符只是分隔符!字段是分隔符(或引号)之间的所有内容如何从列表中访问单个元素?如果我喜欢这个df=pd.read_csv(“whitespace.csv”,header=None,delim_whitespace=True),print(df[0])只打印第一个元素0,但如果我打印(df[1]),它不会打印下一个元素,这不是列表吗?
pd.DataFrame.from_csv("whitespace.csv")