我一直在研究python代码,该代码读取具有800个奇数行和大约17000列的csv文件。我想检查csv文件中的每个条目,并查看此数字是大于还是小于一个值,如果是,则分配一个默认值。我使用了pandas并使用了数据框,apply和lambda函数。完成整个csv文件中的所有条目需要我172分钟。正常吗有没有更快的方法可以做到这一点?我正在使用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)
将熊猫用于CVS数据,可以提高效率。但是您的代码效率不高。如果您尝试使用给出的打击代码,将会更快。
def do_something(some_dataframe):
col = get_req_colm(some_dataframe)
col = col.to_numpy()
np_array = np.zeros_like(col)
for i in range(len(col)):
k = np_array[i]
temp_data = np.zeros_like()
temp_data[k == 1 or k == 4] = 1
temp_data[k == 2 or k == 3 or k == 5 or k == 6] = 2
np_array[i] = k
modified_dataframe = pandas.Dataframe(np_array)
return modified_dataframe
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
它将运行完美,并且不要忘记导入numpy。
import numpy as np
如果您不了解,请查看一些numpy教程,然后再进行。下面给出的链接将对您有所帮助
Replacing elements in a numpy array when there are multiple conditions