我编写了一个代码,该代码在单元格中获取值,然后对其进行更改,并且该代码应使用新值替换该单元格中的值。我有.replace
个适合虚拟数据框的函数,它可以工作,但对于我的示例,它不起作用。
旧值和新值是很长的字符串。我尝试过使用inplace=True
并没有使用它。
我的目标是更改ServiceDirection
的值。
您可以从此处下载数据:
https://www.sendspace.com/file/7soufd
旧值如下所示:
...ype=1|ServiceDirection=2|CmtsMdIfIn...
新值如下所示:
ype=1|ServiceDirection=DS|CmtsMdIfIn
这是代码:
data = pd.read_csv('data.csv')
def third_task():
new_data = data
for column in data:
for row in data[column]:
if 'ServiceDirection=1' in str(row):
new_row = str(row).replace('ServiceDirection=1', 'ServiceDirection=DS')
new_data = data.replace(str(row), new_row)
elif 'ServiceDirection=2' in str(row):
new_row = str(row).replace('ServiceDirection=2', 'ServiceDirection=US')
new_data = data.replace(str(row), new_row)
export_csv = new_data.to_csv(r'C:\Users\Pc\Desktop\export_dataframe1.csv', index = None, header=False)
return new_data
print(third_task())
我也尝试这样做:
df.replace(row, result)
代替此:
data[column] = data[column].replace(str(row), str(result), inplace=True)
但是仍然无法正常工作,它总是返回带有旧值的数据框
答案 0 :(得分:1)
我不知道您是否尝试构建数据。如果是这样,我就是这样做的。
df = pd.read_csv('data.csv', sep = '|', header = None)
df.columns = df.iloc[0, :].apply(lambda x: x.split('=')[0])
df = df.apply(lambda x: x.str.split('=').str.get(1))
df.head()
ServiceSlaDelayPkts ServiceTimeCreated CmtsMdIfName ServiceSlaDropPkts ServiceGateId ServiceClassName CmtsSysUpTime ServicePktsPassed ServiceIdentifier ServiceDsMulticast ... ServiceTimeActive CmMacAddr ServiceOctetsPassed ServiceAppId CmtsHostName RecCreationTime RecType ServiceDirection CmtsMdIfIndex ,,,
0 0 4199286300 Cable1/0/0 0 0 USXnet 4294746100 7710 13 0 ... 954374 aaaa.bbbb.cccc 1033134 7 ibis-instruments-1.com 1555675968867 1 2 1001 NaN
1 0 4199286300 Cable0/0/0 0 0 DSXnet 4294746100 287 14 0 ... 954374 aaaa.bbbb.cccc 96868 7 ibis-instruments-1.com 1555675968867 1 1 1001 NaN
2 0 4199290300 Cable1/0/0 0 0 USXnet 4294746100 9527731 15 0 ... 954284 dddd.bbbb.cccc 1471545334 7 ibis-instruments-1.com 1555675968867 1 2 1001 NaN
3 0 4199290300 Cable0/0/0 0 0 DSXnet 4294746100 128871002 16 0 ... 2968 dddd.bbbb.cccc 188935852314 7 ibis-instruments-1.com 1555675968867 1 1 1001 NaN
4 0 4260449700 Cable0/0/0 0 0 USXnet 4294746100 452297 17 0 ... 342739 dddd.bbbb.mmmm 77459364 7 ibis-instruments-2.com 1555675968868 1 2 1001 NaN
df['CmMacAddr'] = df['CmMacAddr'].str.replace('.', '').str.upper()
df['CmMacAddr'] = df['CmMacAddr'].apply(lambda x: '.'.join(x[i:i+2] for i in range(0,len(x), 2)))
第一行代码读取.csv,以“ |”分隔各列(默认值为comma(,))。
第二行我重命名列名称,因为您的csv没有header
,所以我只选择了一行(df.iloc[0, :]
),然后覆盖了所有值(apply
),并用'='分隔并从索引0获取值。
最后一行代码与第二行非常相似,但是我从每个拆分中获取第二个值,并用此新值替换所有行。
如果您逐行执行我的代码并在它们之间添加df.head()
,则会看到演变过程:)