Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Pandas read_CSV解析云SQL CSV导出空值(";N)_Pandas_Google Cloud Sql - Fatal编程技术网

如何使用Pandas read_CSV解析云SQL CSV导出空值(";N)

如何使用Pandas read_CSV解析云SQL CSV导出空值(";N),pandas,google-cloud-sql,Pandas,Google Cloud Sql,使用Airflow,我们将数据从Google Cloud SQL导出到CSV,并最终将该CSV加载到另一个SQL仓库中。但是,云SQL将空值导出为字符串“N(这是已知的Google问题:)。作为临时步骤,我们需要打开文件并删除“N。csv中也有实际字符串,通常使用“ 理想情况下,我们可以用pandas实现这一点-我们正在设置下一步使用数据帧。但是,我无法让read_csv将“N解释为空。以下是我尝试过的基本命令: df=pd.read\u csv(文件路径,na\u值='N') 我也尝试过na_

使用Airflow,我们将数据从Google Cloud SQL导出到CSV,并最终将该CSV加载到另一个SQL仓库中。但是,云SQL将空值导出为字符串
“N
(这是已知的Google问题:)。作为临时步骤,我们需要打开文件并删除
“N
。csv中也有实际字符串,通常使用

理想情况下,我们可以用pandas实现这一点-我们正在设置下一步使用数据帧。但是,我无法让read_csv将
“N
解释为空。以下是我尝试过的基本命令:

df=pd.read\u csv(文件路径,na\u值='N')

我也尝试过
na_values=“\“N”
,但结果相同

似乎
read\u csv
首先检查字符串,然后检查空值,所以我得到的输出如下所示:

Id                                                                           100
IncidentDate                                                 2018-08-29 07:00:00
StudentInvolved                                                      Psueudonym
IncidentLocation                                                       Classroom
IncidentCategory                                             Academic dishonesty
IncidentDescriptionDetails     [TESTING] How does this insert into table when...
FollowUp                                                                       0
ConsequenceGiven                                             Afterschool Academy
ConsequenceStartDate                                                         N,N
ConsequenceEndDate                                                           N,N
PrimaryViolation                                                 <email address>
Weapon                                                             <school_name>
CreatedBy                                                                    N,N
SiteName                                                                    1000
DisciplinaryActionAuthority                                                N,0,N
DocumentationUrl                                                             N,N
SIS_ID                                                                       N,N
SubmittedBy                                                                  N,N
Deleted                                                                      N,N
FollowUpNotes                                                                N,N
StudentLists_fk                                                              N,N
ID100
附带日期2018-08-29 07:00:00
学生未解决的问题
意外事故定位教室
附带类别学术欺诈
IncidentDescriptionDetails[测试]当。。。
后续0
课后学院
结果开始日期N,N
结果结束日期N,N
初犯
武器
由N,N创建
站点名称1000
纪律处分机构N,0,N
文档URL N,N
SIS_ID N,N
由N,N提交
删除N,N
后续注释N,N
学生名单

关于读取csv是否能够解析该值的任何想法?

在加载到数据帧之前,您需要替换该值。一种方法是在linux中使用
sed
命令

sed's/“N/NULL/g”.csv

然后装进熊猫

自动生成导出语句:

folderName=`date +%m-%d-%Y`
fileName=`date +%H:%M:%S`
gs_path="gs://generic_test/$folderName/$fileName.csv"
gcloud sql export csv upc-asin-mapping $gs_path --query="select * from tableName;" --database=db_name
gsutil -m cp $gs_path .
sed -i "" 's/"N/NULL/g' $fileName.csv
gsutil -m cp $fileName.csv $gs_path
上面的脚本将下载该文件,将
“N
替换为
NULL
,然后用相同的名称重新上载相同的文件。
这不是一种可扩展的方法。

在加载到数据帧之前,需要替换该值。一种方法是在linux中使用
sed
命令

sed's/“N/NULL/g”.csv

然后装进熊猫

自动生成导出语句:

folderName=`date +%m-%d-%Y`
fileName=`date +%H:%M:%S`
gs_path="gs://generic_test/$folderName/$fileName.csv"
gcloud sql export csv upc-asin-mapping $gs_path --query="select * from tableName;" --database=db_name
gsutil -m cp $gs_path .
sed -i "" 's/"N/NULL/g' $fileName.csv
gsutil -m cp $fileName.csv $gs_path
上面的脚本将下载该文件,将
“N
替换为
NULL
,然后用相同的名称重新上载相同的文件。
这不是一种可扩展的方法。

最终不得不通过替换文本来强制它

    with open(filepath, 'r', encoding="utf-8") as inputFile:
        raw_text = inputFile.read()

    edited_text = raw_text.replace('"N,', ',')
    edited_text = edited_text.replace(',"N\n', ',\n')

    with open(edited_filepath, 'w', newline='\n', encoding="utf-8") as outputFile:
        outputFile.write(edited_text)

    df = pd.read_csv(edited_filepath, names=incident_columns)

一个缺点是,这会弄乱任何合法以
N、
N\N
开头的字符串,但希望我们的用户不会有这样的输入习惯。

最终不得不通过替换文本来强制输入

    with open(filepath, 'r', encoding="utf-8") as inputFile:
        raw_text = inputFile.read()

    edited_text = raw_text.replace('"N,', ',')
    edited_text = edited_text.replace(',"N\n', ',\n')

    with open(edited_filepath, 'w', newline='\n', encoding="utf-8") as outputFile:
        outputFile.write(edited_text)

    df = pd.read_csv(edited_filepath, names=incident_columns)

一个缺点是,这会弄乱任何合法以
N、
N\N
开头的字符串,但希望我们的用户没有这样输入东西的习惯。

这大致就是我们最终要做的,但在Python内部,而不是在Linux中。在Linux中,您可以选择使用
gsutil
中的
-m
选项进行多线程下载。我不确定python中是否存在这种情况。因此,我更喜欢bash script这大致就是我们最终要做的,但是在Python内部而不是Linux中。在Linux中,您可以选择在
gsutil
中使用
-m
选项进行多线程下载。我不确定python中是否存在这种情况。因此,我更喜欢bash脚本