首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将数据拆分为3列数据

将数据拆分为3列数据
EN

Stack Overflow用户
提问于 2020-04-02 17:25:53
回答 1查看 57关注 0票数 2

我很难将一个数据文件解析成一个数据框架。当我用熊猫阅读数据时,我会得到一个包含所有信息的列数据框架。

代码语言:javascript
复制
Server    
7.14.182.917 - - [20/Dec/2018:08:30:21 -0500] "GET /tools/performance/log/lib/ui-bootstrap-tpls-0.23.5.min.js HTTP/1.1" 235 89583
7.18.134.196 - - [20/Dec/2018:07:40:13 -0500] "HEAD / HTTP/1.0" 502 -
...

我想在三列中解析数据。我尝试使用df[['Server', 'Date', 'Address']] = pd.DataFrame([ x.split() for x in df['Server'].tolist() ]),但我得到了一个错误,ValueError: Columns must be same length as key有一种方法可以解析数据,使其有3列,如下所示

代码语言:javascript
复制
Server        Date                          Address                               
7.14.182.917  20/Dec/2018:08:30:21 -0500.   "GET /tools/performance/log/lib/ui-bootstrap-tpls-0.23.5.min.js HTTP/1.1" 235 89583
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-02 17:39:21

这里可以根据输入文件类型和格式采取多种方法。如果文件是有效的字符串路径,请尝试以下方法(请参阅更多)

代码语言:javascript
复制
import pandas as pd
# approach 1
df = pd.read_fwf('inputfile.txt')

# approach 2
df = pd.read_csv("inputfile.txt", sep = "\t") # check the delimiter

# then select the columns you want
df_subset = df[['Server', 'Date', 'Address']]

全面解决办法:

代码语言:javascript
复制
import pandas as pd

# read in text file
df = pd.read_csv("test_input.txt", sep=" ", error_bad_lines=False)

# convert df to string
df = df.astype(str)

# get num rows
num_rows = df.shape[0]

# get IP from index, then reset index
df['IP'] = df.index

# reset index to proper index
new_index = pd.Series(list(range(num_rows)))
df = df.set_index([new_index])

# rename columns and drop old cols
df = df.rename(columns={'Server': 'Date', 'IP': "Server"})

# create Date col, drop old col
df['Date'] = df.Date.str.cat(df['Unnamed: 1'])
df = df.drop(["Unnamed: 1"], axis=1)

# Create address col, drop old col
df['Address'] = df['Unnamed: 2'] + df['Unnamed: 3'] + df['Unnamed: 4']
df = df.drop(["Unnamed: 2","Unnamed: 3","Unnamed: 4"], axis=1)

# Strip brackets, other chars
df['Date'] = df['Date'].str.strip("[]")
df['Server'] = df["Server"].astype(str)
df['Server'] = df['Server'].str.strip("()-'', '-',")

返回:

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60997482

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档