Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/338.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 csv列值转到新行,导致在中加载错误_Python_Pandas_Csv_Text Processing - Fatal编程技术网

Python csv列值转到新行,导致在中加载错误

Python csv列值转到新行,导致在中加载错误,python,pandas,csv,text-processing,Python,Pandas,Csv,Text Processing,我对csv有一个问题,它在一个列中有一个拆分,并转到一个新行。我可以手动编辑.csv来解决这个问题,但是有大约200个文件 数据集包含更多列,并且可以包含null,但是最后一列始终具有值。每次该问题也仅在同一列中出现。因此,我考虑查找最后一个值何时为null,然后尝试用.shift()填充这些值,但希望找到一种更简单的方法 vscode中的视图 熊猫阅读 通缉纵队 修复您的文件: 使用m=re.findall(')(?修复文件: 使用m=re.findall(')(?溶液 下面是另一个解决方

我对csv有一个问题,它在一个列中有一个拆分,并转到一个新行。我可以手动编辑.csv来解决这个问题,但是有大约200个文件

数据集包含更多列,并且可以包含null,但是最后一列始终具有值。每次该问题也仅在同一列中出现。因此,我考虑查找最后一个值何时为null,然后尝试用.shift()填充这些值,但希望找到一种更简单的方法

vscode中的视图 熊猫阅读 通缉纵队 修复您的文件:
  • 使用
    m=re.findall(')(?修复文件:
    
    • 使用
      m=re.findall(')(?溶液
      下面是另一个解决方案:

      这里的逻辑是首先找到以4位数字开头的行

      B.识别行后,任何行(顶部行除外:标题行)

      • 没有以4位数字开头的,以及
      • 没有三个分隔的“
      ”,“
将被追加到上一行

C.最后,在一行的末尾删除任何空白,所有行被放在一起形成一个字符串,如果用户愿意,可以将其写入.csv文件

D.我们使用
io.StringIO
作为数据帧加载此字符串

示例-1
将熊猫作为pd导入
从io导入StringIO
进口稀土
def get_clean_数据(行):
target_lines=[re.findall('^\d{4}',line)表示行中的行]
target_lines_dict=dict((i,val[0])如果(len(val)>0)枚举(target_lines)中i,val的else(i,None)
正确的_行=列表()
行索引=0
对于i,枚举中的行(行):
如果i==0:
更正\u行。追加(line.strip())
如果i>0:
如果target_line_dict[i]不是None:
更正\u行。追加(line.strip())
行索引+=1
其他:
正确的行[行索引]+=''+行.strip()
正确的_行=[re.sub(',\s*',','行)+'\n'用于正确的_行中的行]
ss=''。连接(正确的线)
返回ss
#虚拟数据
s=”“”
医嘱ID、水果、计数、人员
3523,苹果,84,彼得
2522,绿色
葡萄,99,玛丽
1299,西瓜,93,保罗
"""
lines=s.strip().split('\n')
#如果是csv文件,请使用readlines:
#将open('csv_file.csv','r')作为f:
#行=f.读行()
#清除数据
ss=获取数据(行)
#生成数据帧
df=pd.read_csv(StringIO(ss),sep=',')
打印(df)
输出

   orderid         fruit   count  person
0     3523         apple      84   peter
1     2522   green grape      99    mary
2     1299    watermelon      93    paul
   orderid          fruit   count  person
0     3523          apple      84   peter
1     2522    green grape      99    mary
2     1299     watermelon      93    paul
3     3523          apple      84   peter
4     2522   green banana      99    mary
5     1299     watermelon      93    paul
6     3523          apple      84   peter
7     2522    green apple      99    mary
8     1299     watermelon      93    paul
示例2 现在让我们使用以下虚拟数据

s=”“”
医嘱ID、水果、计数、人员
3523,苹果,84,彼得
2522,绿色
葡萄,99,玛丽
1299,西瓜,93,保罗
3523,苹果,84,彼得
2522,绿色
香蕉,99,玛丽
1299,西瓜,93,保罗
3523,苹果,84,彼得
2522,绿色
苹果,99岁,玛丽
1299,西瓜,93,保罗
"""
输出

   orderid         fruit   count  person
0     3523         apple      84   peter
1     2522   green grape      99    mary
2     1299    watermelon      93    paul
   orderid          fruit   count  person
0     3523          apple      84   peter
1     2522    green grape      99    mary
2     1299     watermelon      93    paul
3     3523          apple      84   peter
4     2522   green banana      99    mary
5     1299     watermelon      93    paul
6     3523          apple      84   peter
7     2522    green apple      99    mary
8     1299     watermelon      93    paul
解决方案 下面是另一个解决方案:

这里的逻辑是首先找到以4位数字开头的行

B.识别行后,任何行(顶部行除外:标题行)

  • 没有以4位数字开头的,以及
  • 没有三个分隔的“”,“
将被追加到上一行

C.最后,在一行的末尾删除任何空白,所有行被放在一起形成一个字符串,如果用户愿意,可以将其写入.csv文件

D.我们使用
io.StringIO
作为数据帧加载此字符串

示例-1
将熊猫作为pd导入
从io导入StringIO
进口稀土
def get_clean_数据(行):
target_lines=[re.findall('^\d{4}',line)表示行中的行]
target_lines_dict=dict((i,val[0])如果(len(val)>0)枚举(target_lines)中i,val的else(i,None)
正确的_行=列表()
行索引=0
对于i,枚举中的行(行):
如果i==0:
更正\u行。追加(line.strip())
如果i>0:
如果target_line_dict[i]不是None:
更正\u行。追加(line.strip())
行索引+=1
其他:
正确的行[行索引]+=''+行.strip()
正确的_行=[re.sub(',\s*',','行)+'\n'用于正确的_行中的行]
ss=''。连接(正确的线)
返回ss
#虚拟数据
s=”“”
医嘱ID、水果、计数、人员
3523,苹果,84,彼得
2522,绿色
葡萄,99,玛丽
1299,西瓜,93,保罗
"""
lines=s.strip().split('\n')
#如果是csv文件,请使用readlines:
#将open('csv_file.csv','r')作为f:
#行=f.读行()
#清除数据
ss=获取数据(行)
#生成数据帧
df=pd.read_csv(StringIO(ss),sep=',')
打印(df)
输出

   orderid         fruit   count  person
0     3523         apple      84   peter
1     2522   green grape      99    mary
2     1299    watermelon      93    paul
   orderid          fruit   count  person
0     3523          apple      84   peter
1     2522    green grape      99    mary
2     1299     watermelon      93    paul
3     3523          apple      84   peter
4     2522   green banana      99    mary
5     1299     watermelon      93    paul
6     3523          apple      84   peter
7     2522    green apple      99    mary
8     1299     watermelon      93    paul
示例2 现在让我们使用以下虚拟数据

s=”“”
医嘱ID、水果、计数、人员
3523,苹果,84,彼得
2522,绿色
葡萄,99,玛丽
1299,西瓜,93,保罗
3523,苹果,84,彼得
2522,绿色
香蕉,99,玛丽
1299,西瓜,93,保罗
3523,苹果,84,彼得
2522,绿色
苹果,99岁,玛丽
1299,西瓜,93,保罗
"""
输出

   orderid         fruit   count  person
0     3523         apple      84   peter
1     2522   green grape      99    mary
2     1299    watermelon      93    paul
   orderid          fruit   count  person
0     3523          apple      84   peter
1     2522    green grape      99    mary
2     1299     watermelon      93    paul
3     3523          apple      84   peter
4     2522   green banana      99    mary
5     1299     watermelon      93    paul
6     3523          apple      84   peter
7     2522    green apple      99    mary
8     1299     watermelon      93    paul

*编辑、vscode和记事本++显示类似的结果。您是如何获得此CSV的?如果您使用python
open()
write()
创建它,那么您应该使用模块
CSV
,该模块应使用
编写绿色葡萄
在文件中创建正确的csv数据。然后熊猫会正确读取它。遗憾的是,他们是这样下载的…我没有创建它们。我添加了一个部分,以便从所有csv文件中轻松创建数据帧。*编辑、vscode和记事本++显示类似的结果。您是如何获得此csv的?如果您使用python
open(),
write()
然后您应该使用模块
csv
,该模块应该用
编写
绿葡萄
来创建正确的c