如何在熊猫中读取非结构化的CSV

伊斯兰教

我有一个混乱的csv文件(只是扩展名是csv)。但是当我在MS Excel中用;分隔符打开此文件时,它看起来如下图(虚拟示例)-

我调查了此文件,发现以下内容:

  1. 一些列具有名称,而其他列则没有。
  2. 行的长度是可变的,但包含换行符char来触发下一行的开始。

问题:

我如何在熊猫中读取此表,而所有现有列(标题)都保留,空白列中填充连续的数字,所以行的长度可变。

实际上,我想一次又一次地获取8个单元格的值,直到用完所有行。从无标题列进行分析。

注:我已经试过usecolsnamesskiprowssep等中read_csv,但没有成功

数据

编辑

添加了示例输入和预期输出(格式较差,但pandas.read_clipboard(应该可以)

输入

car_id   car_type    entry_gate  entry_time(ms)  exit_gate   exit_time(ms)   traveled_dist(m)    avg_speed(m/s)  trajectory(x[m]    y[m]    speed[m/s]  a_tangential[ms-2]  a_lateral[ms-2] timestamp[ms]   )                                           
24   Bus    25  4300    26  48520   118.47  2.678999    509552.78   5039855.59  10.074  0.429   0.2012  0   509552.97   5039855.57  10.0821 0.3853  0.2183  20                      
25   Car    25  20  26  45900   113.91  2.482746    509583.7    5039848.78  4.5344  -0.1649 0.2398  0   509583.77   5039848.71                                      
26   Car     -   -   -   -  109.68  8.859805    509572.75   5039862.75  4.0734  -0.7164 -0.1066 0   509572.67   5039862.76  4.0593  -0.7021 -0.1141 20  509553.17   5039855.55  10.0886 0.2636  0.2356  40
27   Car     -   -   -   -  119.84  3.075936    509582.73   5039862.78  1.191   0.5247  0.0005  0   509582.71   5039862.78  1.2015  0.5322                              
28   Car     -   -   -   -  129.64  4.347466    509591.07   5039862.9   1.6473  0.1987  -0.0033 0   509591.04   5039862.89  1.6513  0.2015  -0.0036 20  

预期输出(数据帧)

car_id   car_type    entry_gate  entry_time(ms)  exit_gate   exit_time(ms)   traveled_dist(m)    avg_speed(m/s)  trajectory(x[m]    y[m]    speed[m/s]  a_tangential[ms-2]  a_lateral[ms-2] timestamp[ms]   1   2   3   4   5   6   7   8   9   10  11  12
24   Bus    25  4300    26  48520   118.47  2.678999    509552.78   5039855.59  10.074  0.429   0.2012  0   509552.97   5039855.57  10.0821 0.3853  0.2183  20                      
25   Car    25  20  26  45900   113.91  2.482746    509583.7    5039848.78  4.5344  -0.1649 0.2398  0   509583.77   5039848.71                                      
26   Car     -   -   -   -  109.68  8.859805    509572.75   5039862.75  4.0734  -0.7164 -0.1066 0   509572.67   5039862.76  4.0593  -0.7021 -0.1141 20  509553.17   5039855.55  10.0886 0.2636  0.2356  40
27   Car     -   -   -   -  119.84  3.075936    509582.73   5039862.78  1.191   0.5247  0.0005  0   509582.71   5039862.78  1.2015  0.5322                              
28   Car     -   -   -   -  129.64  4.347466    509591.07   5039862.9   1.6473  0.1987  -0.0033 0   509591.04   5039862.89  1.6513  0.2015  -0.0036 20      
耶斯列尔

预处理

get_names()打开文件功能,检查拆分行的最大长度。然后,我阅读第一行并添加最大长度中的缺失值。

第一行的最后一个值是),因此我将其删除firstline[:-1],然后再将丢失的列添加到+1 rng = range(1, m - lenfirstline + 2)+2是因为范围从值开始1

然后,您可以使用function read_csv,跳过第一行,并使用name的输出作为名称get_names()

import pandas as pd
import csv
 
#preprocessing
def get_names():
    with open('test/file.txt', 'r') as csvfile:
        reader = csv.reader(csvfile)
        num = []
        for i, row in enumerate(reader):
            if i ==0:
                firstline = ''.join(row).split()
                lenfirstline = len(firstline)
                #print firstline, lenfirstline
            num.append(len(''.join(row).split()))
        m = max(num)
        rng = range(1, m - lenfirstline + 2)
        #remove )
        rng = firstline[:-1] + rng
        return rng

#names is list return from function
df = pd.read_csv('test/file.txt', sep="\s+", names=get_names(), index_col=[0], skiprows=1)
#temporaly display 10 rows and 30 columns
with pd.option_context('display.max_rows', 10, 'display.max_columns', 30):
    print df
        
       car_type entry_gate entry_time(ms) exit_gate exit_time(ms)  \
car_id                                                              
24          Bus         25           4300        26         48520   
25          Car         25             20        26         45900   
26          Car          -              -         -             -   
27          Car          -              -         -             -   
28          Car          -              -         -             -   

        traveled_dist(m)  avg_speed(m/s)  trajectory(x[m]        y[m]  \
car_id                                                                  
24                118.47        2.678999        509552.78  5039855.59   
25                113.91        2.482746        509583.70  5039848.78   
26                109.68        8.859805        509572.75  5039862.75   
27                119.84        3.075936        509582.73  5039862.78   
28                129.64        4.347466        509591.07  5039862.90   

        speed[m/s]  a_tangential[ms-2]  a_lateral[ms-2]  timestamp[ms]  \
car_id                                                                   
24         10.0740              0.4290           0.2012              0   
25          4.5344             -0.1649           0.2398              0   
26          4.0734             -0.7164          -0.1066              0   
27          1.1910              0.5247           0.0005              0   
28          1.6473              0.1987          -0.0033              0   

                1           2        3       4       5   6          7  \
car_id                                                                  
24      509552.97  5039855.57  10.0821  0.3853  0.2183  20        NaN   
25      509583.77  5039848.71      NaN     NaN     NaN NaN        NaN   
26      509572.67  5039862.76   4.0593 -0.7021 -0.1141  20  509553.17   
27      509582.71  5039862.78   1.2015  0.5322     NaN NaN        NaN   
28      509591.04  5039862.89   1.6513  0.2015 -0.0036  20        NaN   

                 8        9      10      11  12  
car_id                                           
24             NaN      NaN     NaN     NaN NaN  
25             NaN      NaN     NaN     NaN NaN  
26      5039855.55  10.0886  0.2636  0.2356  40  
27             NaN      NaN     NaN     NaN NaN  
28             NaN      NaN     NaN     NaN NaN  

后期处理

首先,您必须估计最大列数N我知道他们的真实数字是26,所以我估计N = 30read_csv具有参数name = range(N)返回NaN列的函数列的估计长度与实际长度之间有什么区别。

下降,您可以选择的列名,其中没有第一行后NaN(我去掉最后一列)[:-1]) - df1.loc[0].dropna()[:-1]然后,您可以NaN在第一行中追加范围从1到长度的新系列最后第一行被的子集删除df

#set more as estimated number of columns
N = 30
    
df1 = pd.read_csv('test/file.txt', sep="\s+", names=range(N))

df1 = df1.dropna(axis=1, how='all')  #drop columns with all NaN

df1.columns = df1.loc[0].dropna()[:-1].append(pd.Series(range(1, len(df1.columns) - len(df1.loc[0].dropna()[:-1]) + 1 )))

#remove first line with uncomplete column names
df1 = df1.ix[1:]
print df1.head()

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

在熊猫数据框中读取非结构化词典

来自分类Dev

如何在 Java 中读取这个非结构化平面文件?

来自分类Dev

在hadoop中处理非结构化和多行CSV

来自分类Dev

如何在R中的非结构化序列中删除常规月份的观测值?

来自分类Dev

如何使用python从非结构化HTML中创建结构化数组

来自分类Dev

如何在非结构化数据中的特定字符串之前提取日期?

来自分类Dev

如何从循环结构化数据中读取属性

来自分类Dev

读取Java中的结构化文件

来自分类Dev

如何在python中处理结构化语言文件

来自分类Dev

如何在numba中创建结构化标量列表?

来自分类Dev

如何创建根据文件名标记非结构化数据集的csv文件

来自分类Dev

将非结构化CSV数据加载到Hive中

来自分类Dev

将数据从非结构化TXT文件移动到CSV中

来自分类Dev

R导入半非结构化数据CSV

来自分类Dev

如何将这些非结构化数据转化为结构化数据?

来自分类Dev

如何使用T-SQL在SQL Server中输出非结构化文件?

来自分类Dev

如何从数据库中收集非结构化数据?

来自分类Dev

从结构化数组中读取信息

来自分类Dev

从 Kafka 读取时 Pyspark 结构化流中的异常

来自分类Dev

如何在 Marshmallow 中反序列化不同的结构化 JSON 数据?

来自分类Dev

如何测试非结构化Javascript / JQuery

来自分类Dev

如何使用Apache Pig构建非结构化数据

来自分类Dev

非结构化数据的数据挖掘如何实现?

来自分类Dev

列表的结构化和非结构化的区别

来自分类Dev

结构化 PAAS 与非结构化 PAAS

来自分类Dev

从文本文件中读取(某种程度上)非结构化数据以创建Python字典

来自分类Dev

在Shell脚本/ Linux中解析非结构化数据

来自分类Dev

解析外壳中的非结构化数据

来自分类Dev

在python中解析非结构化文本

Related 相关文章

  1. 1

    在熊猫数据框中读取非结构化词典

  2. 2

    如何在 Java 中读取这个非结构化平面文件?

  3. 3

    在hadoop中处理非结构化和多行CSV

  4. 4

    如何在R中的非结构化序列中删除常规月份的观测值?

  5. 5

    如何使用python从非结构化HTML中创建结构化数组

  6. 6

    如何在非结构化数据中的特定字符串之前提取日期?

  7. 7

    如何从循环结构化数据中读取属性

  8. 8

    读取Java中的结构化文件

  9. 9

    如何在python中处理结构化语言文件

  10. 10

    如何在numba中创建结构化标量列表?

  11. 11

    如何创建根据文件名标记非结构化数据集的csv文件

  12. 12

    将非结构化CSV数据加载到Hive中

  13. 13

    将数据从非结构化TXT文件移动到CSV中

  14. 14

    R导入半非结构化数据CSV

  15. 15

    如何将这些非结构化数据转化为结构化数据?

  16. 16

    如何使用T-SQL在SQL Server中输出非结构化文件?

  17. 17

    如何从数据库中收集非结构化数据?

  18. 18

    从结构化数组中读取信息

  19. 19

    从 Kafka 读取时 Pyspark 结构化流中的异常

  20. 20

    如何在 Marshmallow 中反序列化不同的结构化 JSON 数据?

  21. 21

    如何测试非结构化Javascript / JQuery

  22. 22

    如何使用Apache Pig构建非结构化数据

  23. 23

    非结构化数据的数据挖掘如何实现?

  24. 24

    列表的结构化和非结构化的区别

  25. 25

    结构化 PAAS 与非结构化 PAAS

  26. 26

    从文本文件中读取(某种程度上)非结构化数据以创建Python字典

  27. 27

    在Shell脚本/ Linux中解析非结构化数据

  28. 28

    解析外壳中的非结构化数据

  29. 29

    在python中解析非结构化文本

热门标签

归档