我有一个包含多列的数据框。数据框中的两列是table_name和column_name。我需要检查SQL Server数据库的table_name中的column_name是否可用。
现在,我有一个用于此功能的check_column_existence()函数,如果使用传统的读取csv文件并调用该函数的传统方法,该函数似乎可以正常工作
<FlatList
scrollEnabled={this.state.scrollEnable}
style={s}
ref={ref => this.scrollView = ref}
onContentSizeChange={(contentWidth, contentHeight) => {
this.scrollView.scrollToEnd({ animated: true }); }}
ListHeaderComponent={<View>{this.state.TempView}</View>}
data={this.state.MainScrollView}
renderItem={({ item }) => (
<View>{item}</View>
)}
keyExtractor={(item, index) => index.toString()}
/>
使用我当前的方法更新了此问题。请建议是否有更快的方法来达到目的。如果可能的话,我应该如何在这种情况下使用df.apply()或lambda函数?
提前感谢您的帮助或建议。
答案 0 :(得分:0)
您的代码可能有不同的改进。
首先(这是您的问题),您仅使用临时的csv文件浏览数据帧。正如{coldspeed所解释的那样,apply
不好,但是使用磁盘更糟。
由于您已经具有要逐行应用于现有数据框以添加新列的Python函数,因此这是apply
的用例。直接访问底层的numpy数组当然更快,但是熊猫已经被创建为具有便捷框架,而便利是以付出代价的。因此,您可以在此处向数据框添加新列:
df = pd.read_csv(input_csv_file_path)
df['DB_Entity'] = df['DB_Entity'].str.replace(' ', '')
df['DB_Attributes'] = df['DB_Attributes'].str.replace(' ', '')
df['DB_Attr_Exist'] = df.apply(lambda x: check_column_existence(
dbHost, dbPort, dbName, dbUser, dbPassword,
'dbo'+x['DB_Entity'], x['DB_Attributes'])
接下来,在check_column_existence
函数中,为每行创建一个新的数据库连接。这是一个相当昂贵的操作,您实际上应该在处理文件之前将其打开一次,并仅在最后将其关闭。