How to export a FC into a csv reordering fields

180
1
Jump to solution
a month ago
SanchezNuñez
Occasional Contributor

Good morning,

How can I export a FC to csv file, selecting some specific fields, and reorganizing them in a specific order needed by the application that is going to load this data?

Thanks

 

0 Kudos
1 Solution

Accepted Solutions
Tom_Laue
New Contributor III

One option is to hard-code the desired field order into the script.

 

 

import arcpy
import pandas as pd

fc = r'https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/USA_States_Generalized_Boundaries/FeatureServer/0'
fieldnames=[]
fields = arcpy.ListFields(fc)

# get list of field names from fc
for field in fields:
    print(field.name)
    fieldnames.append(field.name)

# convert FC to df
data = [row for row in arcpy.da.SearchCursor(fc, fieldnames)]
fc_dataframe = pd.DataFrame(data, columns=fieldnames)
print(fc_dataframe)

# remove specific fields
ListOfFieldsToRemove = ['OBJECTID','Shape__Area','Shape__Length','Shape']
fc_dataframe.drop(ListOfFieldsToRemove , axis=1, inplace = True)
print("printing dataframe...")
print(fc_dataframe)


# reorder fields
df =  fc_dataframe[['STATE_ABBR', 'STATE_FIPS', 'STATE_NAME', 'POPULATION', 'POP_SQMI', 'SQMI']]
df_reordered =  fc_dataframe[['STATE_ABBR', 'POP_SQMI', 'SQMI', 'STATE_FIPS', 'STATE_NAME','POPULATION']]                  
print("printing dataframe (with fields re-ordered)...")
print(df_reordered)

# export to csv
print("exporting to csv")
df.to_csv(r'C:\Temp\CSV_export.csv', index=False)

 

 

Another option is to have a template .csv file and read the field order from that and then program your output to match the template.

View solution in original post

0 Kudos
1 Reply
Tom_Laue
New Contributor III

One option is to hard-code the desired field order into the script.

 

 

import arcpy
import pandas as pd

fc = r'https://services.arcgis.com/P3ePLMYs2RVChkJx/arcgis/rest/services/USA_States_Generalized_Boundaries/FeatureServer/0'
fieldnames=[]
fields = arcpy.ListFields(fc)

# get list of field names from fc
for field in fields:
    print(field.name)
    fieldnames.append(field.name)

# convert FC to df
data = [row for row in arcpy.da.SearchCursor(fc, fieldnames)]
fc_dataframe = pd.DataFrame(data, columns=fieldnames)
print(fc_dataframe)

# remove specific fields
ListOfFieldsToRemove = ['OBJECTID','Shape__Area','Shape__Length','Shape']
fc_dataframe.drop(ListOfFieldsToRemove , axis=1, inplace = True)
print("printing dataframe...")
print(fc_dataframe)


# reorder fields
df =  fc_dataframe[['STATE_ABBR', 'STATE_FIPS', 'STATE_NAME', 'POPULATION', 'POP_SQMI', 'SQMI']]
df_reordered =  fc_dataframe[['STATE_ABBR', 'POP_SQMI', 'SQMI', 'STATE_FIPS', 'STATE_NAME','POPULATION']]                  
print("printing dataframe (with fields re-ordered)...")
print(df_reordered)

# export to csv
print("exporting to csv")
df.to_csv(r'C:\Temp\CSV_export.csv', index=False)

 

 

Another option is to have a template .csv file and read the field order from that and then program your output to match the template.

0 Kudos