2017-12-02 70 views

回答

1

首先决定你想用坏线做什么?

如果你想跳过它们

,使用额外的参数(S),而使用熊猫读文件:

error_bad_lines=False 

代码变为:

>>> df = pd.read_csv("test_data_file.csv", delimiter=":", warn_bad_lines=False, error_bad_lines=False) 

,如果你不想砸“异常”的数据(通常情况),基于分离器的数量每行读出的数据作为串&过程的行如下:

>>> df = pd.read_csv("/home/kiran/test_data_2.csv") 
>>> df["id"]= df['id:message:user'].apply(lambda x: x.split(":")[0]) 
>>> df["message"]= df['id:message:user'].apply(lambda x: x.split(":")[1] if (len(x.split(":"))==3) else x.split(":")[1]+":"+x.split(":")[2]) 
>>> df["user"]= df['id:message:user'].apply(lambda x: x.split(":")[-1]) 
>>> df.drop('id:message:user', 1, inplace=True) 
>>> df.head(5) 
    id  message  user 
0 1   hi admin 
1 2 im fine :) user1 
+0

感谢您的回答,但跳过错误将失去 – K3rnel31

+0

然后,你需要的数据告诉逻辑如何根据您的数据模式来细化数据。 – KiranM

+0

确切地说,行上的条件和操纵行 – K3rnel31

0

在您的示例中,额外的分隔符只能出现在中间列中。

所以,如果你读了输入行成一个字符串,就可以很容易地找到这两个分隔符:

  • 第一分离器是第一个“:”在字符串中
  • 第二隔板是最后的' :”在串

因此:

  • 第一隔离物S之前的字符串的任何部分HOULD转到第一列
  • 所述第一和最后一个分离器应该进入第二列(包括在该消息中的所有冒号)
  • 字符串的任何部分的最后分离器之后应该去之间的字符串的任何部分入到第三塔

(请注意,如果有多于一列可以包含分离这种方法是行不通的。)

相关问题