我有一个包含16列和大约10亿行的大型数据集。
在这个数据集中,我面临两个主要问题
more or less
而不是16列我正在使用error_rows=False
这是在跳过行,但我正在执行大约30次操作,每次都花费太多时间。
DateTime
。执行将人类可读转换为Unix
格式的操作之一。 dtype
主要是因为error_rows
这给了我错误&警告dtype
或插入low_memory=False
如果我插入dtype
,那么下一个错误并且警告正在转移到另一列。
代码:
for i in input_files:
Tmp_Table = pd.DataFrame()
address = direc + i
df = pd.read_csv(address,sep=',',error_bad_lines=False)
3
列中的16
列datetime
似乎列混合dtype
可能是由于错误行造成的。为了避免这种情况,我使用了low_memory=False
,这也给了我以下错误
Traceback (most recent call last):
File "FirstTable.py", line 20, in <module>
Tmp_Table['Datetime'] = df['Tweeted Datetime'].apply(lambda x: UnixFormat(str(x)))
File "/usr/local/lib/python2.7/dist-packages/pandas/core/series.py", line 2355, in apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas/_libs/src/inference.pyx", line 1569, in pandas._libs.lib.map_infer (pandas/_libs/lib.c:66440)
File "FirstTable.py", line 20, in <lambda>
Tmp_Table['Datetime'] = df['Tweeted Datetime'].apply(lambda x: UnixFormat(str(x)))
File "/home/lakshmi/Desktop/Twitter_Code_Ubuntu/Functions.py", line 41, in UnixFormat
unixtime = previous
UnboundLocalError: local variable 'previous' referenced before assignment
因此,我试图找到一种简单快捷的方法,从数据集中一次性删除这些错误行,这样我的下一步操作就不会那么多了。
任何人都可以建议我这样做的最好方法..提前致谢。
答案 0 :(得分:2)
当你在谈论Unix格式时,我假设你在unix系统上。
如果是这样,您可以使用awk
预处理数据。
如果你的分隔符是标签:
awk 'NF==16{print}{}' data > data_edit
如果您的分隔符是逗号:
awk -F',' 'NF==16{print}{}' data > data_edit
awk将检查列数,并且只会筛选出等于16的列。之后,只需将它们存储到data_edit中
现在你应该留下一个包含16列的数据集,希望这可以解决你的大部分问题。
如果要检查文件中的列数:
awk -F',' '{print NF}' data | sort | uniq -c
这将打印出两列:出现次数 - 列数