Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.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 什么正则表达式可以用于获取以下响应的数据帧_Python_Regex_Dataframe - Fatal编程技术网

Python 什么正则表达式可以用于获取以下响应的数据帧

Python 什么正则表达式可以用于获取以下响应的数据帧,python,regex,dataframe,Python,Regex,Dataframe,早上好,我有一个问题或担忧,我正在使用python与一些计算机建立ssh连接并获得答案,问题是在数据帧中有一个我无法以最佳方式获得的答案 我的答案如下: print(data) Interface PHY Protocol Description GE1/2/7 up up Conexion a YMTSOMCY7750SR702 *1/1

早上好,我有一个问题或担忧,我正在使用python与一些计算机建立ssh连接并获得答案,问题是在数据帧中有一个我无法以最佳方式获得的答案

我的答案如下:

print(data)

Interface                     PHY     Protocol Description                     
GE1/2/7                       up      up       Conexion a YMTSOMCY7750SR702 *1/1/5 (Servicio 1711 1Gbps) IP7BTO01 Gi7/0/0
GE1/2/8                       up      up       Conexion a IP7MCY01 Gi1/0/1     
GE1/2/9                       up      up       Conexion a YMTSOMCY7750SR702 *2/1/6 (Servicio 608 1Gbps) IP7VAL01 Gi4/0/1
当我应用以下代码行来获取数据帧时:

df = pd.read_csv(io.StringIO(data), sep='\s+')
print(df)
                                                              Interface  \
GE1/2/7 up up Conexion a YMTSOMCY7750SR702 1/1/5   (Servicio     1711.0   
GE1/2/8 up up Conexion a IP7MCY01          Gi1/0/1 NaN              NaN   
GE1/2/9 up up Conexion a YMTSOMCY7750SR702 2/1/6   (Servicio      608.0   

                                                                 PHY  \
GE1/2/7 up up Conexion a YMTSOMCY7750SR702 1/1/5   (Servicio  1Gbps)   
GE1/2/8 up up Conexion a IP7MCY01          Gi1/0/1 NaN           NaN   
GE1/2/9 up up Conexion a YMTSOMCY7750SR702 2/1/6   (Servicio  1Gbps)   

                                                              Protocol  \
GE1/2/7 up up Conexion a YMTSOMCY7750SR702 1/1/5   (Servicio  IP7BTO01   
GE1/2/8 up up Conexion a IP7MCY01          Gi1/0/1 NaN             NaN   
GE1/2/9 up up Conexion a YMTSOMCY7750SR702 2/1/6   (Servicio  IP7VAL01   

                                                             Description  
GE1/2/7 up up Conexion a YMTSOMCY7750SR702 1/1/5   (Servicio     Gi7/0/0  
GE1/2/8 up up Conexion a IP7MCY01          Gi1/0/1 NaN               NaN  
GE1/2/9 up up Conexion a YMTSOMCY7750SR702 2/1/6   (Servicio     Gi4/0/1

       Interface    PHY Protocol  \
0      EthTrunk4  *down     down   
1      EthTrunk8     up       up   
2   GE7/1/5(10G)  *down     down   
3   GE7/1/6(10G)     up       up   
4   GE7/1/7(10G)     up       up   
5   GE7/1/9(10G)     up       up   
6  GE16/1/5(10G)  *down     down   
7  GE16/1/7(10G)     up       up   

                                         Description  
0           LAGPED76MCY01_2/43/4PNEMCY01_7/1/516/1/5  
1  LAGPNE5MCY01_GE7/1/7GE16/1/7PED77MCY03_Te3/1/3...  
2  Conexion_a_PED76MCY01_2/43/4PNEMCY01_7/1/516/1...  
3                   Conexion_a_PED76MCY01_Te0/8/0/0_  
4  Conexion_a_LAGPNE5MCY01_GE7/1/9PED77MCY03_Te3/...  
5  Conexion_a_YMTSOMCY7750SR1201_3/2/1_(Servicio_...  
6  Conexion_a_PED76MCY01_2/43/4PNEMCY01_7/1/516/1...  
7  Conexion_a_LAGPNE5MCY01_GE7/1/9PED77MCY03_Te8/...  
我正在尝试用正则表达式组装分隔符(sep),但是正则表达式的问题对我来说仍然很难理解,正如您可以看到的那样,使用表达式\s+作为分隔符,但是在我的上一篇专栏文章中,我没有得到我想要的

更新:除了friend@Grateate Odoo提供的解决方案外,我还得到了另一个可能更简单的解决方案,基本上是基于在将数据转换为数据帧之前处理数据,因此我所做的是将字符串传递到列表中,将描述列中的字符串中的空格转换为下划线(_),然后再次将其转换为字符串,现在可以在我的数据帧中使用“\s+”分隔符

data=list(data)                  # Transformo mi data(de tipo string) en una lista para su manipulacion
# print(data)
count1=(len(data))               # Cuento el total de elemento que tiene mi lista
print(data[47])                  # Variable que me desmuestra que desde exite 47 caracteres desde el inicio de mi cadena hasta el incio de la ultima "columna"
while i < count1:              
    if z >= 47 and data[ind] !='\n' :             
        if data[ind]==' ':  
            data[ind]='_'
    elif data[ind]=='\n':       
        z=-1      
    i+=1
    ind+=1                    
    z+=1
#   print(z)
data=''.join(data)      
# print(data)
df = pd.read_csv(io.StringIO(data),sep='\s+') 
df=df.rename(columns = {'Description_____________________':'Description'})      
print(df)                           

当您使用
sep='\s'
时,第二行表示它包含12列

# take a look at this
print(len(re.split('\s+', "GE1/2/7                       up      up       Conexion a YMTSOMCY7750SR702 *1/1/5 (Servicio 1711 1Gbps) IP7BTO01 Gi7/0/0")))
如果您的所有列被多个空格分隔,只需在标题中修改大小写即可 并使用
sep=(\s\s+)

输出:

   Interface PHY Protocol                                        Description
0   GE1/2/7  up       up  Conexion a YMTSOMCY7750SR702 *1/1/5 (Servicio ...
1   GE1/2/8  up       up                        Conexion a IP7MCY01 Gi1/0/1
2   GE1/2/9  up       up  Conexion a YMTSOMCY7750SR702 *2/1/6 (Servicio ...
例如,如果这不起作用,您需要将数据修复为有效的专用csv格式 对于您的演示数据:

输出:

0 GE1/2/7
1 GE1/2/8
2 GE1/2/9
名称:接口,数据类型:对象

当您使用
sep='\s'
时,第二行表示它包含12列

# take a look at this
print(len(re.split('\s+', "GE1/2/7                       up      up       Conexion a YMTSOMCY7750SR702 *1/1/5 (Servicio 1711 1Gbps) IP7BTO01 Gi7/0/0")))
如果您的所有列被多个空格分隔,只需在标题中修改大小写即可 并使用
sep=(\s\s+)

输出:

   Interface PHY Protocol                                        Description
0   GE1/2/7  up       up  Conexion a YMTSOMCY7750SR702 *1/1/5 (Servicio ...
1   GE1/2/8  up       up                        Conexion a IP7MCY01 Gi1/0/1
2   GE1/2/9  up       up  Conexion a YMTSOMCY7750SR702 *2/1/6 (Servicio ...
例如,如果这不起作用,您需要将数据修复为有效的专用csv格式 对于您的演示数据:

输出:

0 GE1/2/7
1 GE1/2/8
2 GE1/2/9
名称:接口,数据类型:对象

我找到了另一个解决方案,但我将尝试这个看起来非常优化的解决方案。谢谢我有另一个解决方案,但我会尝试这个看起来非常优化的方案。非常感谢。