【发布时间】:2020-05-21 13:17:19
【问题描述】:
我一直在编写一个 python 代码,它读取一个包含 800 行和大约 17000 列的 csv 文件。 我想检查 csv 文件中的每个条目,看看这个数字是大于还是小于一个值,如果是,我分配一个默认值。我使用了 pandas 并使用了 dataframes、apply 和 lambda 函数。我需要 172 分钟才能完成 csv 文件中的所有条目。正常吗?有没有更快的方法来做到这一点?我正在使用 Python 2.7。我不知道它是否有帮助,但我在具有 32GB 内存的 Windows 10 机器上运行它。提前感谢您的帮助。
代码附在下面。
def do_something(some_dataframe):
col = get_req_colm(some_dataframe)
modified_dataframe = pd.DataFrame()
for k in col:
temp_data = some_dataframe.apply(lambda x: check_for_range(x[k]), axis=1).tolist()
dictionary = {}
dictionary[str(k)] = temp_data
temp_frame = pd.DataFrame(dictionary)
modified_dataframe = pd.concat([modified_dataframe, temp_frame], axis=1)
return modified_dataframe
def check_for_range(var):
var = int(var)
try:
if var == 0:
return 0
if var == 1 or var == 4:
return 1
if var == 2 or var == 3 or var == 5 or var == 6:
return 2
except:
print('error')
def get_req_colm(df):
col = list(df)
try:
col.remove('index/Sample count')
col.remove('index / Sample')
col.remove('index')
col.remove('count')
except:
pass
return col
df_after_doing_something = do_something(some_dataframe)
df_after_doing_something.to_csv(output_folder + '\\df_after_doing_something.csv', index=False)
【问题讨论】:
-
您的缩进混淆了。可以修一下吗?
-
抱歉,现在好点了吗?
-
这里有一大堆问题。在
check_for_range中,您的 try 块永远不会抛出(但它之外的东西会抛出)。我不确定“col.remove”位在做什么。为什么不使用apply将函数应用于所有列? -
@erip 我可以一次应用到所有列吗?我现在使用 for 循环一次应用到每一列。
标签: python csv large-files