pandas数据帧问题与特殊字符

时间:2016-09-23 20:45:41

标签: python pandas

我正在努力解决pandas数据框的以下问题 Python 2.7.12 大熊猫0.18.1

df = pd.read_csv(file_name, encoding='utf-16', header=0, index_col=False, error_bad_lines=False,
                     names=['Package_Name','Crash_Report_Date_And_Time','Crash_Report_Millis_Since_Epoch','Device', 'Android_OS_Version','App_Version_Name','App_Version_Code','Exception_Class_Name','Exception_Message','Throwing_File_Name','Throwing_Class_Name','Throwing_Method_Name','Throwing_Line_Number','Native_Crash_Library','Native_Crash_Location','Crash_Link'])

我调试代码,发现以下数据未在数据帧中正确插入。

Exception_Message字段中有一些特殊字符告诉pandas将该行的其余数据移动到下一行。

Pandas如何正确读取文件。

以下是两行的输出。 137和138是行号。

Package_Name Crash_Report_Date_And_Time  \
137  com.vcast.mediamanager        2016-09-05 14:54:13   
138                     NaN                 Class.java   

    Crash_Report_Millis_Since_Epoch        Device  Android_OS_Version  \
137                   1473087253130       victara                  22   
138                 java.lang.Class  classForName                  -2   

    App_Version_Name  App_Version_Code  \
137          14.3.34      1.503050e+09   
138              NaN               NaN   

                                  Exception_Class_Name  \
137                   java.lang.ClassNotFoundException   
138  https://play.google.com/apps/publish?dev_acc=0...   

                     Exception_Message Throwing_File_Name Throwing_Class_Name  \
137  Invalid name: com.strumsoft.appen                NaN                 NaN   
138                                NaN                NaN                 NaN   

    Throwing_Method_Name  Throwing_Line_Number Native_Crash_Library  \
137                  NaN                   NaN                  NaN   
138                  NaN                   NaN                  NaN   

    Native_Crash_Location Crash_Link account_id  
137                   NaN        NaN       NONE  
138      

         NaN        NaN       NONE  

使用来自行137的一些数据错误地创建了行138. 137中的Exception Message字段具有将该行打破到下一行的某个值。这是错的。

我尝试了不同的编码没有任何帮助。有人可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

所以解决方案非常简单。在Pandas 0.18中,我必须指定df = pd.read_csv(file_name,lineterminator='\n', encoding='utf-16', delimiter=',', header=0, index_col=False, error_bad_lines=False,...

In [10]: df.set_index('Date').ix['2010-01-01' : '2010-01-10']
Out[10]:
            Quantity
Date
2010-01-01         1
2010-01-02         0
2010-01-03         0
2010-01-04         2
2010-01-05         3
2010-01-06         1
2010-01-07         0
2010-01-08         1
2010-01-09         1
2010-01-10         2

In [11]: df.set_index('Date').ix['2010-01-01' : '2010-01-10', 'Quantity'].plot.bar(grid=False, legend=False)

这个简单的标志解决了我的问题。