When you read a csv file with Pandas the result is a Pandas DataFrame, therefore why create a new DataFrame: dataframe = pd.DataFrame() ?
data = pd.read_csv("lat_long.csv")
list(data.columns)
['lat', 'lon']
type(data)
<class 'pandas.core.frame.DataFrame'>
data.head()
lat lon
0 41.389474 2.156421
1 41.383093 2.181116
2 41.373258 2.159358
3 41.385252 2.168779
4 41.390692 2.148911
Now
You can use List Comprehension
data['geometry'] = [Point(xy) for xy in zip(data.lon, data.lat)]
data.head()
lat lon geometry
0 41.389474 2.156421 POINT (2.156421 41.389474)
1 41.383093 2.181116 POINT (2.181116 41.383093)
2 41.373258 2.159358 POINT (2.159358 41.373258)
3 41.385252 2.168779 POINT (2.168779 41.385252)
4 41.390692 2.148911 POINT (2.148911 41.390692)
You can use the apply command
data['geometry2'] = data.apply(lambda row:Point(row['lon'],row['lat']), axis=1)
data.head()
lat lon geometry geometry2
0 41.389474 2.156421 POINT (2.156421 41.389474) POINT (2.156421 41.389474)
1 41.383093 2.181116 POINT (2.181116 41.383093) POINT (2.181116 41.383093)
2 41.373258 2.159358 POINT (2.159358 41.373258) POINT (2.159358 41.373258)
3 41.385252 2.168779 POINT (2.168779 41.385252) POINT (2.168779 41.385252)
4 41.390692 2.148911 POINT (2.148911 41.390692) POINT (2.148911 41.390692)
You can also use GeoPandas (From CSV to GeoDataFrame in two lines)
import geopandas as gpd
data = pd.read_csv("lat_long.csv")
gdf = gpd.GeoDataFrame(data, geometry=gpd.points_from_xy(data.lon, data.lat)
gdf.head()
lat lon geometry
0 41.389474 2.156421 POINT (2.15642 41.38947)
1 41.383093 2.181116 POINT (2.18112 41.38309)
2 41.373258 2.159358 POINT (2.15936 41.37326)
3 41.385252 2.168779 POINT (2.16878 41.38525)
4 41.390692 2.148911 POINT (2.14891 41.39069)
datafram['geometry']notdata['geometry']– user2856 Jul 17 '21 at 06:13