gpt4 book ai didi

python - 如何找到混合类型的输入行

转载 作者:太空宇宙 更新时间:2023-11-03 11:18:34 25 4
gpt4 key购买 nike

我正在阅读 pandas 中的大型 csv:

features = pd.read_csv(filename, header=None, names=['Time','Duration','SrcDevice','DstDevice','Protocol','SrcPort','DstPort','SrcPackets','DstPackets','SrcBytes','DstBytes'], usecols=['Duration','SrcDevice', 'DstDevice', 'Protocol', 'DstPort','SrcPackets','DstPackets','SrcBytes','DstBytes'])

我得到:

sys:1: DtypeWarning: Columns (6) have mixed types. Specify dtype option on import or set low_memory=False.
%!PS-Adobe-3.0

如何找到导致此警告的输入中的第一行?我需要这样做来调试输入文件的问题,该文件不应具有混合类型。

最佳答案

一旦 Pandas 完成读取文件,您不能找出哪些行有问题(请参阅 this answer 了解原因)。

这意味着您应该阅读文件时找到一种方法。例如,逐行读取文件,并检查每一行的类型,如果其中任何一个与预期的类型不匹配,那么您就得到了想要的行。

要使用 Pandas 实现此目的,您可以将 chunksize=1 传递给 pd.read_csv() 以分块读取文件(大小为 N 的数据帧,其中 1案件)。查看documentation如果您想了解更多。

代码是这样的:

# read the file in chunks of size 1. This returns a reader rather than a DataFrame
reader = pd.read_csv(filename,chunksize=1)

# get the first chunk (DataFrame), to calculate the "true" expected types
first_row_df = reader.get_chunk()
expected_types = [type(val) for val in first_row_df.iloc[0]] # a list of the expected types.

i = 1 # the current index. Start from 1 because we've already read the first row.
for row_df in reader:
row_types = [type(val) for val in row_df.iloc[0]]
if row_types != expected_types:
print(i) # this row is the wanted one
break
i += 1

请注意,此代码假设第一行具有“真实”类型。这段代码真的很慢,所以我建议您实际上只检查您认为有问题的列(尽管这不会带来太多性能提升)。

关于python - 如何找到混合类型的输入行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836226/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com