如何修改下面的 Python 代码以在 Pandas 中的字符串开头附加一个字符?
How do I modify my Python code below to append a character to the beginning of the string in Pandas?
我正在做一项数据可视化作业,我需要获取数据集并进行某些可视化。考虑有关数据集的以下内容:
- 列由经度表示(附有 'E' 或 'W' 的字符串列表分别表示东经或西经)
- 行由纬度表示(一列字符串 'N' 或 'S' 分别表示北纬或南纬)
所以我必须读取数据集,将附有 'N' 的纬度转换为正浮点值,将附有 'S' 的纬度转换为负浮点值(整个数据都在字符串中) .
同样,我必须将附有 'E' 的经度转换为正浮点值,并将附有 'W' 的经度转换为负浮点值。
由于我是 Python、Pandas、Numpy 的新手,我在实现相同目标时遇到了很多困难。到目前为止,我已经能够将字符串格式的纬度和经度转换为浮点格式,并分别去掉 'N'、'S'、'E'、'W' 字符。但是,我无法弄清楚如何根据 float 之前的字符 ('N'、'S'、'E'、'W') 使 float 值变为正值或负值转换。
以下是我到目前为止编写的代码:
import pandas as pd
df = pd.read_csv("Aug-2016-potential-temperature-180x188.txt", skiprows = range(7))
df.columns = ["longitude"]
df = df.longitude.str.split("\t", expand = True)
smaller = df.iloc[::10,:]
print(df.head(10), end = "\n")
print(smaller, end = "\n")
print(df.iloc[1][3], end = "\n")
print(smaller.iloc[2][175], end = "\n")
import numpy as np
import pandas as pd
data = pd.read_csv('~/documents/datasets/viz_a1/Aug-2016-potential-temperature-180x188.txt', skiprows=7)
data.columns = ['longitudes']
data = data['longitudes'].str.split('\t', expand=True)
df = data.iloc[::10,:]
df.head()
# replace 'E' with '' and 'W' with ''
df.loc[0] = df.loc[0].str.replace('E', '').str.replace('W', '')
# convert the longitude values to float values (THIS ONE WORKS)
df.loc[0] = df.loc[0][1:].astype(float)
# replace 'S' with '' and 'N' with ''
df.loc[:][0] = df.loc[:][0].str.replace('S', '').str.replace('N', '')
# convert latitude values into float values (THIS ONE DOES NOT WORK!!)
df.loc[:][0] = df.loc[:][0].astype(float)
# checking if the float values exist
print(df.loc[0][2], ' data-type ', type(df.loc[0][2])) # columns converted into float
print(df.loc[30][0], ' data-type ', type(df.loc[30][0])) # rows not converted into float
疑问:
- 如何根据符号将值转换为正负浮点值('S'、'W'表示-ve浮点值,'E'、'N'表示正浮点值)
- 我如何成功地将纬度转换为浮点值(我编写的代码没有将行转换为浮点数;也没有抛出任何错误!)
P.S. 经度的转换产生了很多警告。如果有人能解释为什么我会收到这些警告以及如何防止它们,那会很好吗? (同样,我是 Python 和 Pandas 的新手!)
可以找到数据集here
这是数据集的截图:
我会在 read_csv 函数中添加更多参数以获得一个数据框,其中列是经度字符串,索引是纬度。数据框中的数据现在是栅格数据
df = pd.read_csv(r'Aug-2016-potential-temperature-180x188.txt',
skiprows=8, delimiter='\t', index_col=0)
然后我会使用以下代码将纵向字符串(数据框的列)转换为浮点数:
column_series = pd.Series(df.columns)
df.columns = column_series.apply(lambda x: float(x.replace('E','')) if x.endswith('E') else -float(x.replace('W','')))
在我使用以下代码将纬度字符串(数据帧的索引)转换为浮点数之后:
index_series = pd.Series(df.index)
df.index = index_series.apply(lambda x: float(x.replace('N','')) if x.endswith('N') else -float(x.replace('S','')))
这可能不是最干净的,但您可以将 'N' 和 'E' 替换为 "",然后使用 np.where 替换 'S' 和 'W', 转为浮点数, 乘以-1
我制作了一个示例 df,我将此过程应用于第一列
example = pd.DataFrame({'1':['S35', 'E24', 'N45', 'W66'],
'2': ['E45', 'N78', 'S12', 'W22']})
example
Out[153]:
1 2
0 S35 E45
1 E24 N78
2 N45 S12
3 W66 W22
col = example.loc[:, '1']
col = col.str.replace('N|E', "")
col
Out[156]:
0 S35
1 24
2 45
3 W66
Name: 1, dtype: object
example.loc[:,'1'] = np.where(col.str.contains('W|S'), col.str.replace('W|S', '').astype('float') * -1, col)
example
Out[158]:
1 2
0 -35 E45
1 24 N78
2 45 S12
3 -66 W22
我正在做一项数据可视化作业,我需要获取数据集并进行某些可视化。考虑有关数据集的以下内容:
- 列由经度表示(附有 'E' 或 'W' 的字符串列表分别表示东经或西经)
- 行由纬度表示(一列字符串 'N' 或 'S' 分别表示北纬或南纬)
所以我必须读取数据集,将附有 'N' 的纬度转换为正浮点值,将附有 'S' 的纬度转换为负浮点值(整个数据都在字符串中) .
同样,我必须将附有 'E' 的经度转换为正浮点值,并将附有 'W' 的经度转换为负浮点值。
由于我是 Python、Pandas、Numpy 的新手,我在实现相同目标时遇到了很多困难。到目前为止,我已经能够将字符串格式的纬度和经度转换为浮点格式,并分别去掉 'N'、'S'、'E'、'W' 字符。但是,我无法弄清楚如何根据 float 之前的字符 ('N'、'S'、'E'、'W') 使 float 值变为正值或负值转换。
以下是我到目前为止编写的代码:
import pandas as pd
df = pd.read_csv("Aug-2016-potential-temperature-180x188.txt", skiprows = range(7))
df.columns = ["longitude"]
df = df.longitude.str.split("\t", expand = True)
smaller = df.iloc[::10,:]
print(df.head(10), end = "\n")
print(smaller, end = "\n")
print(df.iloc[1][3], end = "\n")
print(smaller.iloc[2][175], end = "\n")
import numpy as np
import pandas as pd
data = pd.read_csv('~/documents/datasets/viz_a1/Aug-2016-potential-temperature-180x188.txt', skiprows=7)
data.columns = ['longitudes']
data = data['longitudes'].str.split('\t', expand=True)
df = data.iloc[::10,:]
df.head()
# replace 'E' with '' and 'W' with ''
df.loc[0] = df.loc[0].str.replace('E', '').str.replace('W', '')
# convert the longitude values to float values (THIS ONE WORKS)
df.loc[0] = df.loc[0][1:].astype(float)
# replace 'S' with '' and 'N' with ''
df.loc[:][0] = df.loc[:][0].str.replace('S', '').str.replace('N', '')
# convert latitude values into float values (THIS ONE DOES NOT WORK!!)
df.loc[:][0] = df.loc[:][0].astype(float)
# checking if the float values exist
print(df.loc[0][2], ' data-type ', type(df.loc[0][2])) # columns converted into float
print(df.loc[30][0], ' data-type ', type(df.loc[30][0])) # rows not converted into float
疑问:
- 如何根据符号将值转换为正负浮点值('S'、'W'表示-ve浮点值,'E'、'N'表示正浮点值)
- 我如何成功地将纬度转换为浮点值(我编写的代码没有将行转换为浮点数;也没有抛出任何错误!)
P.S. 经度的转换产生了很多警告。如果有人能解释为什么我会收到这些警告以及如何防止它们,那会很好吗? (同样,我是 Python 和 Pandas 的新手!)
可以找到数据集here
这是数据集的截图:
我会在 read_csv 函数中添加更多参数以获得一个数据框,其中列是经度字符串,索引是纬度。数据框中的数据现在是栅格数据
df = pd.read_csv(r'Aug-2016-potential-temperature-180x188.txt',
skiprows=8, delimiter='\t', index_col=0)
然后我会使用以下代码将纵向字符串(数据框的列)转换为浮点数:
column_series = pd.Series(df.columns)
df.columns = column_series.apply(lambda x: float(x.replace('E','')) if x.endswith('E') else -float(x.replace('W','')))
在我使用以下代码将纬度字符串(数据帧的索引)转换为浮点数之后:
index_series = pd.Series(df.index)
df.index = index_series.apply(lambda x: float(x.replace('N','')) if x.endswith('N') else -float(x.replace('S','')))
这可能不是最干净的,但您可以将 'N' 和 'E' 替换为 "",然后使用 np.where 替换 'S' 和 'W', 转为浮点数, 乘以-1
我制作了一个示例 df,我将此过程应用于第一列
example = pd.DataFrame({'1':['S35', 'E24', 'N45', 'W66'],
'2': ['E45', 'N78', 'S12', 'W22']})
example
Out[153]:
1 2
0 S35 E45
1 E24 N78
2 N45 S12
3 W66 W22
col = example.loc[:, '1']
col = col.str.replace('N|E', "")
col
Out[156]:
0 S35
1 24
2 45
3 W66
Name: 1, dtype: object
example.loc[:,'1'] = np.where(col.str.contains('W|S'), col.str.replace('W|S', '').astype('float') * -1, col)
example
Out[158]:
1 2
0 -35 E45
1 24 N78
2 45 S12
3 -66 W22